使用facet_wrap函数时stat_compare_means仅单分面生效问题求解
分面图全分面添加统计检验结果的解决方案
该问题是由于stat_compare_means默认基于全局数据集计算统计量,未按分面变量拆分运算导致,仅需调整少量参数即可在保留原有图表样式的前提下实现全分面显示检验结果,修改后的代码如下:
ggplot(dat, aes(x=`Treatment`,y=`Endostatin`, fill=Treatment))+ geom_boxplot(outlier.alpha = 0.25, outlier.color = "red") + geom_point(alpha = 0.25, size = 2 ) + facet_wrap(~Mode, scale="free") + # 指定按分面变量Mode分组计算检验,label.y可根据实际y轴范围调整避免标签重叠 stat_compare_means(comparisons = my_comparisons, group.by = "Mode", label.y = c(10, 12, 14)) + # 为y轴顶部预留15%的显示空间,避免p值被截断 scale_y_continuous(expand = expansion(mult = c(0, 0.15))) + theme(axis.text.x = element_text(angle = 20))
补充说明
- 需确保你定义的
my_comparisons中涉及的Treatment分组,在每个Mode分面中都存在,否则对应分面不会显示该组的检验结果 - 若检验标签仍有重叠,可自行调整
label.y的数值,匹配你的数据y轴范围即可 - 如果需要自定义p值格式、显著性标识,可在
stat_compare_means中新增tip.length = 0、p.adjust.method等参数调整样式
内容的提问来源于stack exchange,提问作者Gedara Home
相关产品推荐
相关产品推荐

