在R中能否结合ggpubr包的ggsummarystats()与stat_compare_means()?
问题:ggpubr中同时实现显著性标记与下方统计量展示
我用ggpubr的ggline绘图时,加stat_compare_means()能轻松做带统计检验的可视化。现在想完善图形:在图下方添加每组样本量、均值、置信区间这类基础统计量(ggsummarystats()可实现),同时在图上方显示p值显著性标记。但把ggline嵌套进ggsummarystats()后,单独调用stat_compare_means()会返回NULL。
可正常运行但无显著性标记的代码
df %>% ggsummarystats(x="TIMEPOINT", y="PROTEIN_CONCENTRATION", color="DISEASE", add=c("jitter", "mean_sd"), add.params = list(alpha=0.3), palette= "jco", ggfunc=ggline, summaries = c("n", "mean", "ci") )
添加stat_compare_means()后返回NULL的代码
df %>% ggsummarystats(x="TIMEPOINT", y="PROTEIN_CONCENTRATION", color="DISEASE", add=c("jitter", "mean_sd"), add.params = list(alpha=0.3), palette= "jco", ggfunc=ggline, summaries = c("n", "mean", "ci") ) stat_compare_means(aes(group = DISEASE), label = "p.signif", label.y = 40)
解决方案
要同时实现上方显著性标记和下方统计量展示,有两种可行方式:
方式1:将stat_compare_means整合到add参数中
直接把stat_compare_means()作为add参数的元素传入,和其他图层一起添加到图中:
df %>% ggsummarystats(x="TIMEPOINT", y="PROTEIN_CONCENTRATION", color="DISEASE", add=c("jitter", "mean_sd", stat_compare_means(aes(group = DISEASE), label = "p.signif", label.y = 40)), add.params = list(alpha=0.3), palette= "jco", ggfunc=ggline, summaries = c("n", "mean", "ci") )
方式2:先保存图形对象再叠加图层
先把ggsummarystats()生成的图形存为对象,再用ggplot的+语法叠加stat_compare_means():
p <- df %>% ggsummarystats(x="TIMEPOINT", y="PROTEIN_CONCENTRATION", color="DISEASE", add=c("jitter", "mean_sd"), add.params = list(alpha=0.3), palette= "jco", ggfunc=ggline, summaries = c("n", "mean", "ci") ) p + stat_compare_means(aes(group = DISEASE), label = "p.signif", label.y = 40)
说明
- 单独调用
stat_compare_means()返回NULL是因为它没有绑定到任何ggplot对象,必须和已有的图形对象结合才能生效。 - 两种方式都能实现需求,方式2更适合需要对图形做后续多次调整的场景。
内容的提问来源于stack exchange,提问作者c_dinosaur
相关产品推荐
相关产品推荐

