如何在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
相关产品推荐
相关产品推荐

