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

ggplot2中为多组ANOVA分析柱状图添加p值星号的方法求助

解决ANOVA事后检验柱状图添加p值星号的问题

错误原因

你代码里的报错源于**aov()函数不支持ref.group参数**,这个参数是用来指定事后检验参照组的,应该放在tukey_hsd()中,而非方差分析步骤里。另外,基础aov()的输出格式和rstatix包后续的绘图辅助函数兼容性较差,建议改用rstatix::anova_test()。

修正后的完整代码

# 加载所需包
library(tidyverse)
library(rstatix)
library(ggpubr)

# 数据准备
df <- ToothGrowth
df$dose <- as.factor(df$dose)

# 按supp分组执行ANOVA + Tukey事后检验(指定0.5为参照组)
stat.test <- df %>%
  group_by(supp) %>%
  anova_test(len ~ dose) %>%
  tukey_hsd(dose, ref.group = "0.5")

# 计算p值标注的y轴位置(适配分面分组)
stat.test <- stat.test %>% 
  add_y_position(fun = "mean_sd", group.by = "supp")

# 绘制带p值星号的分面柱状图
ggbarplot(
  df, x = "dose", y = "len", fill = "#FC4E07",
  add = "mean_sd", facet.by = "supp"
) + 
  stat_pvalue_manual(stat.test, label = "p.adj.signif", tip.length = 0.01) +
  scale_y_continuous(expand = expansion(mult = c(0.05, 0.1)))

关键修正说明

  • 将ref.group参数移至tukey_hsd()中:参照组是事后检验的设置,不属于方差分析的参数范畴
  • 用anova_test()替代aov():该函数输出的结果结构更适配rstatix包的后续函数,能无缝衔接事后检验和位置计算
  • 添加group.by = "supp"到add_y_position():确保分面后每个子图的p值标注线能对应到各自组的统计量位置

内容的提问来源于stack exchange,提问作者Trinh Phan-Canh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 21:37:25