You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 09:20:12