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

如何用ggpubr绘制带显著性星号与指定Y轴的分组柱状图

用ggpubr绘制带显著性标记的分组柱状图及Y轴设置方案

1. 加载依赖包

先安装并加载ggpubr及配套统计包rstatix:

install.packages(c("ggpubr", "rstatix")) # 首次运行执行安装
library(ggpubr)
library(rstatix)

2. 数据准备(替换为你的df_ss)

以下是模拟的同结构示例数据,直接替换成你实际的df_ss即可:

# 模拟数据:group为处理组,value为观测指标
set.seed(123)
df_ss <- data.frame(
  group = rep(c("处理组1", "处理组2", "处理组3", "处理组4"), each = 10),
  value = c(rnorm(10, 30, 5), rnorm(10, 50, 6), rnorm(10, 70, 7), rnorm(10, 25, 4))
)

3. 统计检验与显著性位置计算

先做单因素方差分析,再用Tukey法完成处理组两两比较,并自动计算显著性标记的坐标位置:

# 单因素方差分析
anova_res <- anova_test(data = df_ss, dv = value, between = group)
# 两两比较并生成标记位置信息
pwc <- df_ss %>% 
  tukey_hsd(value ~ group) %>% 
  add_xy_position(x = "group")

4. 绘制柱状图并添加显著性标记、设置Y轴

以下代码一次性完成柱状图绘制、显著性星号添加、Y轴范围(0-100)和步长(10)的设置:

ggbarplot(df_ss, 
          x = "group",          # X轴绑定处理组
          y = "value",          # Y轴绑定观测指标
          fill = "group",       # 按处理组填充颜色
          palette = "jco",      # 可选配色,也可自定义如c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3")
          add = "mean_se",      # 添加均值+标准误
          error.plot = "errorbar") + # 误差线样式
  # 添加两两比较显著性星号(ns=无差异, *=p<0.05, **=p<0.01, ***=p<0.001)
  stat_pvalue_manual(pwc, 
                     label = "p.signif", 
                     tip.length = 0.01) +
  # 设置Y轴范围0-100,步长10
  scale_y_continuous(limits = c(0, 100), 
                     breaks = seq(0, 100, 10)) +
  labs(title = "处理组间指标差异比较",
       x = "处理组",
       y = "指标值") +
  theme_pubr() # 使用ggpubr简洁主题

5. 常见问题排查

  • 报错找不到add_xy_position:确认已加载rstatix包,该函数由rstatix提供,必须安装并加载。
  • 显著性标记位置偏移:可在stat_pvalue_manual中手动指定y.position参数,比如y.position = c(35, 55, 75, 32),根据你的数据均值调整。
  • Y轴设置不生效:检查是否有coord_cartesian图层覆盖了scale_y_continuous,若有则移除,或改用coord_cartesian(ylim = c(0,100))配合scale_y_continuous(breaks = seq(0,100,10))。
  • 双分组柱状图(如处理组+时间点):参考以下代码调整:
# 双分组示例数据
df_ss2 <- data.frame(
  treatment = rep(c("处理A", "处理B"), each = 20),
  time = rep(c("T1", "T2"), each = 10, times = 2),
  value = c(rnorm(10, 25, 4), rnorm(10, 35, 5), rnorm(10, 45, 6), rnorm(10, 60, 7))
)

# 双分组两两比较
anova_res2 <- anova_test(data = df_ss2, dv = value, between = c(treatment, time))
pwc2 <- df_ss2 %>% 
  tukey_hsd(value ~ treatment:time) %>% 
  add_xy_position(x = "treatment", group = "time")

# 双分组柱状图绘制
ggbarplot(df_ss2, 
          x = "treatment", 
          y = "value", 
          fill = "time", 
          palette = "npg",
          add = "mean_se",
          error.plot = "errorbar",
          position = position_dodge(0.8)) +
  stat_pvalue_manual(pwc2, 
                     label = "p.signif",
                     position = position_dodge(0.8),
                     tip.length = 0.01) +
  scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, 10)) +
  theme_pubr()

内容的提问来源于stack exchange,提问作者Kiplagat Noel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:47:00