R 如何将位置减淡应用于同一绘图中的几何点和几何文字?

R 如何将位置减淡应用于同一绘图中的几何点和几何文字?,r,ggplot2,R,Ggplot2,我希望能够使geom_点内的geom_文本在应用position_dodge时跟随重新定位。也就是说,我想从下面的代码开始: Q <- as_tibble(data.frame(series = rep(c("diax","diay"),3), value = c(3.25,3.30,3.31,3.36,3.38,3.42), year = c(2018,2018,2019,2019,2

我希望能够使geom_点内的geom_文本在应用position_dodge时跟随重新定位。也就是说,我想从下面的代码开始:

Q <- as_tibble(data.frame(series = rep(c("diax","diay"),3),
                          value = c(3.25,3.30,3.31,3.36,3.38,3.42),
                          year = c(2018,2018,2019,2019,2020,2020))) %>%
  select(year, series, value)

ggplot(data = Q, mapping = aes(x = year, y = value, color = series, label = sprintf("%.2f",value))) +
  geom_point(size = 13) +
  geom_text(vjust = 0.4,color = "white", size = 4, fontface = "bold", show.legend = FALSE) 
这将生成以下图表:

奇怪的是,如果我从geom_point更改为geom_bar,同样的更改也可以正常工作:

ggplot(Q, aes(year, value, fill = factor(series), label = sprintf("%.2f",value))) +
  geom_bar(stat = "identity", position = position_dodge(width = 1)) + 
  geom_text(color = "black", size = 4,fontface= "bold",
            position = position_dodge(width = 1), vjust = 0.4, show.legend = FALSE) 

一个补丁工作如下。由于无法立即使用
geom_text()
在数据点顶部添加标签,因此您可能需要进行一些调整。我首先用
geom\u point()
创建了一个临时图形。然后,我访问了用于绘制图形的数据框。您可以找到x轴和y轴的值。使用它们,我创建了一个名为
temp
的新数据框,其中包括轴信息和标签信息。一旦有了这个数据框,我就可以使用
temp
绘制预期结果。确保在
geom_text()
中使用
inherit.aes=FALSE
,因为您正在使用另一个数据帧

library(dplyr)
library(ggplot2)

g <- ggplot(data = Q, aes(x = year, y = value, color = series)) +
     geom_point(size = 13, position = position_dodge(width = 1))

temp <- as.data.frame(ggplot_build(g)$data) %>%
        select(x, y) %>%
        arrange(x) %>%
        mutate(label = sprintf("%.2f",Q$value))

ggplot(data = Q, aes(x = year, y = value, color = series)) +
geom_point(size = 13, position = position_dodge(width = 1)) +
geom_text(data = temp, aes(x = x, y = y, label = label), 
          color = "white", inherit.aes = FALSE)
库(dplyr)
图书馆(GG2)
g%
排列(x)%>%
变异(标签=sprintf(“%.2f”,Q$value))
ggplot(数据=Q,aes(x=年份,y=数值,颜色=系列))+
几何点(尺寸=13,位置=位置减淡(宽度=1))+
几何图形文本(数据=温度,aes(x=x,y=y,标签=标签),
color=“white”,inherit.aes=FALSE)

之所以会发生这种情况,是因为遮光基于
美学,在这种情况下,由于映射到颜色,会自动设置为
系列
。问题是文本层有自己的颜色(
“白色”
),因此分组被删除。手动设置分组,一切正常:

ggplot(Q, aes(x = year, y = value, color = series, label = sprintf("%.2f",value), group = series)) +
    geom_point(size = 13, position = position_dodge(width = 1)) +
    geom_text(position = position_dodge(width = 1), vjust = 0.4, color = "white", size = 4, 
              fontface = "bold", show.legend = FALSE)

ggplot(Q, aes(x = year, y = value, color = series, label = sprintf("%.2f",value), group = series)) +
    geom_point(size = 13, position = position_dodge(width = 1)) +
    geom_text(position = position_dodge(width = 1), vjust = 0.4, color = "white", size = 4, 
              fontface = "bold", show.legend = FALSE)