如何在多分组箱线图上添加指定p值显著性标记
在自定义ggplot多分组箱线图中添加显著性标记
步骤1:准备统计检验数据
使用ggpubr包按X轴交互组(Tat | cocaine)分组,对Drugcc各组与参考组("0")进行Wilcoxon检验,并校正多重比较:
library(ggpubr) library(dplyr) # 生成统计检验结果 stat_test <- df %>% ungroup() %>% # 取消原数据分组,避免干扰后续分组检验 group_by(T_c) %>% # 按T_c(即Tat与cocaine的交互组)分组 pairwise_wilcox_test( formula = Size ~ Drugcc, ref.group = "0", # 指定参考组为Drugcc=0 p.adjust.method = "BH" # 采用BH法校正多重比较p值 ) # 调整显著性标记位置,匹配箱线图的dodge宽度 stat_test <- stat_test %>% add_xy_position( x = "T_c", dodge = 0.75, # 与自定义函数中boxplot的position_dodge2宽度一致 step.increase = 0.1 # 自动调整不同标记的垂直间距,避免重叠 )
步骤2:增强自定义绘图函数的灵活性
为原函数添加参数,支持选择性添加显著性标记,同时补全y轴标题的设置:
graphDrug <- function(.data, response, var1, var2, colorFill, color_fill_manual, legendFill, ytitle, add_signif = FALSE, signif_data = NULL){ p <- ggplot(.data, aes(interaction(.data[[var1]], .data[[var2]], sep=" | "), .data[[response]], fill=factor(.data[[colorFill]])))+ geom_boxplot(color = "black", alpha = 1, outlier.shape = NA, size=.25, position = position_dodge2(.75, preserve = "single"))+ geom_point(pch = 21, alpha=.7, position = position_jitterdodge(jitter.width = .25))+ scale_fill_manual(values = color_fill_manual, name = legendFill)+ labs(y = ytitle)+ # 补全y轴标题设置 theme_classic(base_size = par('din')[1] * 5)+ theme( text = element_text(face = "bold"), legend.position = "top", panel.grid.major.x = element_blank(), axis.text=element_text(size=rel(1)), axis.text.y = element_text(angle = 90, vjust = 0.5, hjust = 0.5) ) # 按需添加显著性标记 if(add_signif && !is.null(signif_data)){ p <- p + stat_pvalue_manual( signif_data, label = "p.adj.signif", # 显示校正后的显著性符号(*、**等) tip.length = 0.01, bracket.nudge.y = 0, # 可根据需求微调标记垂直位置 step.increase = 0.1 # 自动优化标记间距 ) } return(p) }
步骤3:生成带显著性标记的最终图形
调用修改后的函数,传入统计检验数据即可生成符合预期的图:
fig_name <- "Size" color_fill_manual <- c("#ffffff", "#A6CEE3", "#1F78B4") # 生成带显著性标记的箱线图 p <- graphDrug( df, "Size", "Tat", "cocaine", "Drugcc", color_fill_manual, "Drug", bquote(bold(.(fig_name)~~(μm^2))), add_signif = TRUE, signif_data = stat_test ) print(p)
关键注意事项
- 匹配dodge宽度:
add_xy_position中的dodge参数必须与geom_boxplot的position_dodge2宽度完全一致(此处为0.75),否则标记会错位。 - 自动间距调整:
step.increase参数会根据标记数量自动增加垂直间距,解决多组标记重叠问题。 - 兼容性:该方案完全适配你的现有数据结构,即使X轴包含3个以上交互组也能正常工作。
内容的提问来源于stack exchange,提问作者CeC
相关产品推荐
相关产品推荐

