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

如何在ggplot绘制的箱线图中显示四分位数与中位数数值?

解决ggplot箱线图显示四分位数和中位数数值的问题

你可以通过自定义分位数计算函数,结合stat_summary的geom = "text"来在箱线图上显示Q1、中位数、Q3的具体数值,具体修改如下:

步骤1:自定义分位数标签函数

先写一个函数,计算每个分组的25%、50%、75%分位数,并生成对应百分比格式的标签:

quantile_labels <- function(x) {
  # 计算分位数,忽略NA值
  qs <- quantile(x, probs = c(0.25, 0.5, 0.75), na.rm = TRUE)
  # 返回包含y轴位置和标签的数据框
  data.frame(
    y = qs,
    label = paste0(round(qs * 100, 1), "%")
  )
}

步骤2:修改ggplot代码

在原代码中添加stat_summary部分,调用自定义函数显示数值标签:

CAGR <- ggplot(datalong5, aes(x = Year, y = value, fill = new)) +
  geom_boxplot(outlier.shape = NA, coef = 0) +
  # 添加分位数数值标签
  stat_summary(
    fun.data = quantile_labels,
    geom = "text",
    size = 3.5,  # 调整标签字体大小
    position = position_dodge(width = 0.75),  # 和箱线图分组对齐
    color = "black",
    vjust = -0.5  # 调整标签位置,避免和箱线图重叠
  ) +
  coord_cartesian(ylim = c(-0.1, 0.2)) +
  scale_fill_discrete(name = "") +
  theme(axis.title.x = element_blank()) +
  theme(axis.title.y = element_blank())

CAGR +
  scale_y_continuous(labels = percent, breaks = seq(-0.1, 0.3, by = 0.05)) +
  scale_fill_discrete(name = "Forklaring") +
  theme(legend.position = c(0.85, 0.15)) +
  theme(axis.text = element_text(size = 12, colour = "black"))

关键说明

  • fun.data参数用于传入返回多组y值和标签的函数,这是区别于fun(仅返回单一值)的核心,能同时处理Q1、中位数、Q3三个数值。
  • position_dodge(width = 0.75)确保标签和箱线图的分组(由fill = new定义)对齐,避免同一Year下不同分组的标签重叠。
  • 可以通过调整vjust(垂直位置)、hjust(水平位置)参数优化标签位置,防止和箱线图线条重叠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:22:30