如何用ggpubr绘制无连线的均值点+误差棒图(不含ggline连线)
问题与解决方案
需求说明
我已经学过不少ggpubr的使用教程,基本掌握了它的用法。但我不需要ggline()生成的连线图,只想做仅包含均值点和误差棒的图表(也就是去掉ggline里的连线)。我之前常用ggplot的geom_point() + geom_errorbar()画这类图,但不知道怎么在ggpubr里用stat_compare_means()和stat_pvalue_manual()给目标图表添加显著性标记。
我目前的代码是这样的:
# Line plot of mean +/-se ggline(ToothGrowth, x = "dose", y = "len", add = "mean_se")+ stat_compare_means() + # Global p-value stat_compare_means(ref.group = "0.5", label = "p.signif", label.y = c(22, 29))
我想要的图表效果是只有均值点和误差棒,没有各组之间的连线。另外我试过ggdotplot(),但它默认是散点图,没法给每个条件只生成一个均值点。
解决方法
方法1:修改ggline参数去掉连线
直接在ggline()里设置linetype = "blank",就能保留均值点和误差棒,同时去掉连线,再继续添加显著性标记即可:
ggline(ToothGrowth, x = "dose", y = "len", add = "mean_se", linetype = "blank")+ stat_compare_means() + # 全局p值 stat_compare_means(ref.group = "0.5", label = "p.signif", label.y = c(22, 29))
方法2:用ggdotplot生成均值点+误差棒
如果想换用ggdotplot(),可以通过设置统计参数来生成单均值点和误差棒:
ggdotplot(ToothGrowth, x = "dose", y = "len", stat = "summary", fun = "mean_se")+ stat_compare_means() + stat_compare_means(ref.group = "0.5", label = "p.signif", label.y = c(22, 29))
手动添加p值(stat_pvalue_manual用法)
如果你需要自定义p值或者用预先计算好的p值,可以先计算各组p值,再用stat_pvalue_manual()添加:
# 先计算各组与参考组的p值 p_values <- compare_means(len ~ dose, data = ToothGrowth, ref.group = "0.5") # 绘制图表并添加手动p值标记 ggline(ToothGrowth, x = "dose", y = "len", add = "mean_se", linetype = "blank")+ stat_compare_means() + # 全局p值 stat_pvalue_manual(p_values, label = "p.signif", label.y = c(22, 29))
新手教程推荐
给同是新手的朋友推荐两个优质ggpubr教程:
- STHDA网站的《给ggplot添加p值和显著性水平》教程
- Datanovia网站的《如何给ggplot分面添加p值》教程
内容的提问来源于stack exchange,提问作者anisac
相关产品推荐
相关产品推荐

