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

如何使用R语言原生boxplot命令在箱线图上添加p值

基础R boxplot添加组间p值实现方案

你可以直接通过基础绘图函数搭配组间差异检验实现需求,无需调用ggplot2,完整代码如下:

# 1. 先计算两组间差异p值,可根据数据分布选择检验方法
# 提取两组wbc数据
alive_wbc <- final_df$ximp$wbc[final_df$ximp$Vital_status == "alive"]
dead_wbc <- final_df$ximp$wbc[final_df$ximp$Vital_status == "dead"]
# 正态分布数据用t检验,偏态数据把t.test替换为wilcox.test即可
p_val <- t.test(alive_wbc, dead_wbc)$p.value
# 格式化p值显示格式
p_label <- ifelse(p_val < 0.001, "***", 
                  ifelse(p_val < 0.01, "**", 
                         ifelse(p_val < 0.05, "*", sprintf("p = %.3f", p_val))))

# 2. 绘制基础箱线图(你的原有代码)
boxplot(wbc~Vital_status,
        data=final_df$ximp,
        main="wbc箱线图",
        xlab="生存状态",
        ylab="wbc数值",
        col="orange",
        border="brown",
        outline=FALSE,boxwex=.5, xaxt='n', frame=FALSE
)
axis(side = 1,at = 0:3,labels=c("", "存活", "死亡", ""),lwd.ticks = FALSE)

# 3. 添加显著性连接线与p值
# 提取箱线图的最大值,确定显著性线的绘制高度
y_max <- max(boxplot(wbc~Vital_status, data=final_df$ximp, plot = FALSE)$stats, na.rm = TRUE)
# 绘制两侧短竖线
segments(x0 = 1, y0 = y_max * 1.05, x1 = 1, y1 = y_max * 1.08)
segments(x0 = 2, y0 = y_max * 1.05, x1 = 2, y1 = y_max * 1.08)
# 绘制中间水平连接线
segments(x0 = 1, y0 = y_max * 1.08, x1 = 2, y1 = y_max * 1.08)
# 添加p值标签
text(x = 1.5, y = y_max * 1.12, labels = p_label, cex = 1.2)
  • 若需要调整显著性线高度,可修改y_max的乘系数,系数越大位置越高
  • 若需要调整p值字体大小,可修改text函数的cex参数
  • 若需要保留英文标签,把轴标签和main参数里的中文替换回你原有的英文内容即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:45:02