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

如何旋转ggpubr包stat_compare_means生成的多组配对t检验图p值

问题根因

stat_compare_means函数内部会调用geom_text图层渲染p值,顶层传入的样式参数(如angle、size、vjust等)不会自动传递给该文本图层,必须通过geom_text.args参数封装后传入才能生效,这就是直接加angle=90没有效果的原因。

可行解决方案

以下是完整可复现的修改后代码,适配分面配对t检验p值旋转需求:

# 加载依赖包
library(ggpubr)
library(tidyr)

# 构造示例配对数据
set.seed(123)
df <- data.frame(
  id = rep(1:30, each = 3),
  group = rep(c("Control", "Treat1", "Treat2"), 30),
  value1 = rnorm(90, mean = c(5,7,8), sd = 1.5),
  value2 = rnorm(90, mean = c(4,6,9), sd = 1.2),
  value3 = rnorm(90, mean = c(6,7,10), sd = 1)
)
# 转换为长格式用于分面
df_long <- pivot_longer(df, cols = starts_with("value"), names_to = "index", values_to = "score")

# 绘制旋转p值的分面箱线图
ggboxplot(df_long, x = "group", y = "score", color = "group", 
          facet.by = "index", add = "jitter") +
  stat_compare_means(
    comparisons = list(c("Control", "Treat1"), c("Control", "Treat2"), c("Treat1", "Treat2")),
    method = "t.test", paired = TRUE,
    # 所有文本样式参数统一封装到geom_text.args中
    geom_text.args = list(angle = 90, vjust = 0.5, hjust = 0, size = 3)
  )
额外适配建议
  • 如果运行时提示找不到geom_text.args参数,请先升级ggpubr到最新版本,执行install.packages("ggpubr")即可
  • 如果旋转后p值超出绘图区域,可以通过ylim()扩大y轴范围,或者调整vjust/hjust参数控制文本对齐位置
  • 如果p值位数过长显示不全,可以添加label = "p.signif"参数仅显示显著性星号,减少文本占用空间
  • 分面数量过多时,可以搭配facet_wrap()的ncol/nrow参数调整分面布局,给每块子图留出足够的p值显示空间

内容的提问来源于stack exchange,提问作者Kamau Lindhardt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:54:00