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

