R 如何将位置减淡应用于同一绘图中的几何点和几何文字?
我希望能够使geom_点内的geom_文本在应用position_dodge时跟随重新定位。也就是说,我想从下面的代码开始: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
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)