如何在ggboxplot的fill分组内添加指定组的显著性棒
解决方案
要在「post-stress」(对应数据中的MAST_post)时间点下,仅为NC与IUD组添加显著性棒,你需要限定显著性检验的数据集范围,并指定目标分组的对比组合,具体代码如下:
完整代码示例
首先补充定义你用到的调色板(示例颜色可自行替换):
my_palette <- c("NC" = "#1f77b4", "IUD" = "#ff7f0e", "OC" = "#2ca02c")
在原有箱线图基础上,添加针对MAST_post时间点的显著性标记层:
bxp_stress <- subjstress %>% ggboxplot( x = "timetask", y = "Stress", fill = "group", xlab = "timepoint", ylab = "subjective rating [VAS]", title = "Subjective stress" )+ scale_fill_manual(values = my_palette) + scale_x_discrete(labels = c("pre-ctrl", "post-ctrl", "pre-stress", "post-stress")) + # 原有跨时间点的显著性棒 geom_signif(comparisons = list(c("MAST_pre", "MAST_post"), c("plac_post", "MAST_post")), annotations = "***", step_increase = 0.05, map_signif_level = TRUE, vjust = 0.4, tip_length = 0) + # 新增MAST_post下NC与IUD的显著性棒 stat_compare_means( data = subset(subjstress, timetask == "MAST_post"), # 仅筛选post-stress时间点的数据 aes(group = group), comparisons = list(c("NC", "IUD")), # 指定仅对比NC和IUD两组 label = "p.signif", # 显示自动计算的显著性标记(*、**等) tip.length = 0, vjust = 0.4 ) print(bxp_stress)
关键说明
data = subset(subjstress, timetask == "MAST_post"):把显著性检验的范围限制在「post-stress」时间点内,避免生成全局的组间显著性。comparisons = list(c("NC", "IUD")):明确指定只对比NC和IUD两组,不会自动遍历所有分组组合。- 如果需要固定显示特定显著性标记(比如强制显示
***),可以替换stat_compare_means为geom_signif:
geom_signif( data = subset(subjstress, timetask == "MAST_post"), aes(group = group), comparisons = list(c("NC", "IUD")), annotations = "***", step_increase = 0.05, vjust = 0.4, tip_length = 0, x_position = c(3.6, 4) # 适配默认分组偏移的x坐标,确保棒线位置准确 )
内容的提问来源于stack exchange,提问作者Zoe
相关产品推荐
相关产品推荐

