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
相关产品推荐
相关产品推荐

