You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 11:00:19