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

如何为ggplot箱线图添加百分位数线与汇总统计标注

ggplot箱线图添加分位高亮与均值标注方案

直接在你原有代码基础上叠加stat_summary层即可实现需求,不需要调整原有绘图逻辑,修改后的完整代码如下:

ggplot(aes(y = HT, x = LOCATION, fill = LOCATION, na.rm = TRUE), data = HD1) + 
  geom_boxplot(notch = TRUE) +
  # 高亮25%、75%分位的红色虚线
  stat_summary(
    fun.data = function(x) {
      qts <- quantile(x, probs = c(0.25, 0.75), na.rm = TRUE)
      data.frame(y = qts)
    },
    geom = "hline",
    aes(yintercept = after_stat(y), group = LOCATION),
    color = "red",
    linewidth = 0.8,
    linetype = "dashed"
  ) +
  # 标记均值位置
  stat_summary(
    fun = mean, na.rm = TRUE,
    geom = "point",
    shape = 18, size = 3, color = "gold"
  ) +
  # 标注均值数值
  stat_summary(
    fun.data = function(x) {
      mean_val <- mean(x, na.rm = TRUE)
      data.frame(y = mean_val, label = round(mean_val, 2))
    },
    geom = "text",
    vjust = -0.8,
    size = 3.5
  ) +
  # 原有绘图代码
  scale_fill_manual(breaks = c("NVRN", "PCN"), values=c("sky blue", "red"))+
  coord_cartesian(ylim=c(0,80)) +
  geom_smooth(method="lm", aes(group = 1), color = "darkgrey") + 
  theme_bw() + 
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())

参数调整说明

  • 红色分位线:ggplot默认箱线图本身就以箱体上下沿展示P25、P75分位数,如果你不需要额外叠加虚线高亮,只想把箱体边框改成红色,直接删掉这段stat_summary,在geom_boxplot()里加color = "red"参数即可。
  • 均值样式:代码里用金色菱形标记均值位置,上方打印保留2位小数的均值数值,你可以修改shape、size、color调整标记样式,修改round函数的第二个参数调整小数保留位数,修改vjust值调整文字和标记点的间距。
  • 线性拟合线:给geom_smooth加了aes(group = 1)参数,默认情况下x轴为离散分类变量时,函数会为每个分组单独绘制拟合线,加这个参数后会绘制跨两个分组的整体拟合线,如果你需要分组拟合直接删掉这个映射即可。
  • 扩展其他统计量:如果需要额外展示P5、P95、中位数等其他汇总值,只需要在quantile函数的probs参数里新增对应分位值,按照同样的stat_summary逻辑叠加图层即可。

内容的提问来源于stack exchange,提问作者Joseph Churchill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:54:21