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

