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

如何在R的ggplot2箱线图中显示关键数值(25%、75%分位数)?

在ggplot2箱线图中显示关键数值(四分位数、中位数)

嘿,针对你提出的两个问题,我结合你现有的ggplot2代码,给你两种实用的解决方案:

方法一:提前计算统计量,用geom_text添加

这种方法先手动算出每个分组的关键数值,再精准定位到箱线图对应位置显示,灵活性更高。

步骤1:计算统计量

先加载dplyr包(如果没装的话先运行install.packages("dplyr")),然后按Quarter分组计算25%分位数(Q1)、中位数、75%分位数(Q3):

library(dplyr)
# 计算每个Quarter的关键统计量(处理可能的NA值)
summary_stats <- DFTvalues2 %>%
  group_by(Quarter) %>%
  summarize(
    Q1 = quantile(DFT, 0.25, na.rm = TRUE),
    Median = median(DFT, na.rm = TRUE),
    Q3 = quantile(DFT, 0.75, na.rm = TRUE)
  )

步骤2:修改你的ggplot代码,添加数值标签

在你原有的绘图代码基础上,加入geom_text分别把Q1、中位数、Q3放在对应位置:

# 你的原代码
o <- ggplot(data=DFTvalues2, aes(Quarter, DFT)) + 
  geom_jitter(aes(color=Quarter))+ 
  geom_boxplot(alpha=0.7,outlier.color=NA)+
  xlab("Pipe Quarter")+ 
  ylab("Dry Film Thickness")+ 
  ggtitle("DFT by Pipe Quarter")+ 
  theme( 
    axis.title.x = element_text(color="Black",size=20), 
    axis.title.y = element_text(color="Black",size=20), 
    axis.text.x = element_text(color="Black",size=15), 
    axis.text.y = element_text(color="Black",size=15), 
    plot.title=element_text(size=20), 
    legend.title=element_text(size=15)
  )

# 添加数值标签
o + 
  # 显示Q1(箱线图下边缘)
  geom_text(data=summary_stats, aes(y=Q1, label=round(Q1,2)), vjust=1.5, size=4, color="darkred") +
  # 显示中位数(箱线图中间线)
  geom_text(data=summary_stats, aes(y=Median, label=round(Median,2)), vjust=-0.5, size=4, color="darkblue") +
  # 显示Q3(箱线图上边缘)
  geom_text(data=summary_stats, aes(y=Q3, label=round(Q3,2)), vjust=-1.5, size=4, color="darkgreen")

这里的vjust参数用来调整文本上下位置,避免和箱线图或散点重叠;round()用来控制数值的小数位数,你可以根据需求调整。

方法二:用stat_summary自动计算并添加

这种方法不用提前统计,直接让ggplot2自动计算关键数值并显示,代码更简洁:

步骤1:定义统计函数

先写一个函数,返回我们需要的Q1、中位数、Q3及其标签:

boxplot_stats <- function(x) {
  # 计算25%、50%、75%分位数
  stats <- quantile(x, c(0.25, 0.5, 0.75), na.rm = TRUE)
  # 返回包含y坐标和标签的数据框
  return(data.frame(
    y = stats,
    label = paste0(round(stats, 2))
  ))
}

步骤2:添加到你的绘图中

直接在原有的o对象上加上stat_summary:

o + stat_summary(
  fun.data = boxplot_stats, 
  geom = "text", 
  vjust = -0.8, # 调整文本位置,避免和散点冲突
  size = 4,
  color = "black"
)

这样就会自动在每个箱线图的Q1、中位数、Q3位置上方显示对应的数值啦。如果还想显示最小值或最大值,只需要修改quantile里的分位数参数(比如加上0和1),并调整函数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:36:33