如何在ggplot的facet_wrap分面右侧边际对应中位数处添加‘50%’文本
在ggplot分面图的右侧边际添加中位数标注文本
要实现每个分面右侧边际对应中位数位置显示“50%”,可以按以下方式修改代码:
- 利用已计算好中位数的
bar数据框,通过geom_text指定文本位置 - 配合
coord_cartesian(clip = "off")关闭绘图区域裁剪,让超出区域的文本显示 - 分面会自动根据
bar中的分组变量z匹配对应分面的标注
修改后的完整代码:
library(tidyverse) foo <- data.frame(x=rep(1:50,times=2),y=c(rnorm(50,mean=2),rnorm(50,mean=4)), z=rep(c("A","B"),each=50)) bar <- foo %>% group_by(z) %>% summarise(med=median(y)) ggplot(foo,aes(x,y,color=z)) + geom_point() + geom_hline(data=bar,aes(yintercept = med,col=z)) + # 添加右侧边际的"50%"文本,x设为超出x轴最大值的数值 geom_text(data=bar, aes(x = 52, y = med, label = "50%", color = z)) + facet_wrap(z~.,ncol = 1) + # 固定x轴范围并关闭裁剪,让文本显示在边际 coord_cartesian(xlim = c(1,50), clip = "off") + theme(legend.position = "none", plot.margin = unit(c(1,3,1,1), "lines"))
关键细节说明
x = 52:这个数值需大于x轴最大值(示例中x最大为50),确保文本落在右侧边际,可根据实际x轴范围调整coord_cartesian(xlim = c(1,50), clip = "off"):xlim锁定绘图区域的x轴范围,clip = "off"允许显示超出该范围的元素- 已设置的
plot.margin保证右侧有足够空间容纳文本,避免被截断
内容的提问来源于stack exchange,提问作者user111024
相关产品推荐
相关产品推荐

