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

如何给含两个统计分组变量和分面变量的ggplot添加p值括号?

问题解决方法

你的核心问题是给stat_pvalue_manual传错了数据源,且未正确配置分组偏移参数匹配箱线图的分组逻辑,导致p值括号无法生成。以下是修正方案:

关键修正点

  • 数据源错误:stat_pvalue_manual需要用统计结果stat.test作为数据源,而非合并后的原始数据集datamt
  • 分组偏移不匹配:添加position = position_dodge(0.8),和箱线图的分组偏移保持一致,确保括号对齐分组
  • 简化y轴位置计算:直接基于stat.test中的y.position调整,避免重复数据干扰

修正后的完整代码

library(tidyverse)
library(rstatix)
library(ggpubr)

datamt <- mtcars |>
  group_by(cyl, am) |>
  tidyr::unite("group", cyl, am,  sep=" ", remove = F) |>
  filter(cyl != 8)  # 原代码cyl!="8"类型不匹配,mtcars的cyl是数值型

datamt$compare <- rep(c("A", "B"), len=18)
datamt <- rbind(datamt, datamt)

stat.test <- datamt |>
  group_by(group)|> 
  t_test(formula=mpg~compare, paired=F) |>  # 补全缺失的管道符
  add_significance() |>
  add_xy_position(fun="max", formula=mpg~compare, x = "group", 
                  dodge = 0.8, step.increase = 0)

ggplot(data=datamt, aes(x=group, y=mpg, fill=compare)) +
  stat_boxplot(geom ='errorbar', width = 0.6, lwd=1, 
               position=position_dodge(0.8), color="black")+ 
  geom_boxplot(position=position_dodge(0.8)) +  # 明确分组偏移,避免对齐误差
  facet_wrap(facets=vars(cyl), ncol=4, scales="free")+ 
  stat_pvalue_manual(data=stat.test, 
                     label="p.signif", hide.ns = T, 
                     x="group", 
                     y.position = stat.test$y.position * 1.1,
                     position = position_dodge(0.8),
                     bracket.shorten = 0.1)  # 可选:调整括号缩短长度优化显示

额外说明

  1. 原代码中cyl!="8"是类型错误,mtcars的cyl为数值型,需改为cyl!=8才能正确过滤数据
  2. stat.test的管道链中t_test后缺失管道符,导致后续统计函数无法执行,已补全

内容的提问来源于stack exchange,提问作者Elizabeth W

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 04:16:17