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

ggpubr分面绘图后仅单分面显示显著性标注括号问题问询

分面配对t检验标注缺失原因与解决方案

问题原因

  • ggpubr的stat_compare_means默认开启hide.ns = TRUE参数,会自动隐藏p>0.05的不显著(NS)结果,包括对应的括号和标注文本。你提供的女性分组数据配对t检验结果为不显著,因此默认被隐藏,部分旧版本ggpubr即使手动设置hide.ns = FALSE也会存在适配bug,导致NS标注不显示。
  • 你固定了全局的标注位置,若y轴上限预留空间不足也可能导致标注被截断隐藏。

解决方案

方案1:调整stat_compare_means参数(适配新版本ggpubr)

先升级ggpubr到最新版本,然后在原有代码基础上补充强制显示NS的参数即可,修改后的完整代码如下:

library(ggplot2)
library(ggpubr)
library(dplyr)

# 原有数据
demo = data.frame(percent = c(84.9,71.4,82.6,69.0,94.1,94.8,91.6,86.5,21.4,70.7,92.3,94.4,28.8,21.8,93.7,87.2),
                 status = rep(c("Pre","Pre","Pre","Pre","Post","Post","Post","Post"),2),
                 gender = c(rep("Male",8),rep("Female",8)),
                 id = c(rep(c("1","2","3","4"),2),rep(c("5","6","7","8"),2)))
compare = list(c("Pre","Post"))

# 修改后绘图代码
demo %>% ggplot(aes(x=factor(status,c("Pre","Post")),y=percent,group=id)) + 
  ylim(0,105) + # 调高y轴上限预留标注空间
  geom_point(size = 2, aes(color = status)) + 
  geom_line() + 
  facet_grid(~ gender,switch = "x") +
  theme(legend.position = "none",
        axis.title.x = element_blank(),
        strip.placement = "outside",
        strip.text.x = element_text(angle=0)) +
  stat_compare_means(comparisons = compare,
                     label="p.signif",
                     method = "t.test",
                     paired=T,
                     label.y = 102,
                     label.x = 1.5,
                     tip.length=0,
                     hide.ns = FALSE, # 核心参数:不隐藏NS结果
                     ns.show = TRUE) # 适配部分版本,强制显示NS标注

方案2:手动计算p值添加标注(兼容性最强,无版本问题)

如果调整参数后仍然不显示,可以先按分面分组计算p值和对应标注,再用geom_signif手动添加,完全可控,代码如下:

# 按分面分组计算p值和标注
p_val <- demo %>% 
  group_by(gender) %>% 
  summarise(p = t.test(percent ~ status, paired = TRUE)$p.value) %>% 
  mutate(label = case_when(
    p < 0.001 ~ "***",
    p < 0.01 ~ "**",
    p < 0.05 ~ "*",
    TRUE ~ "NS"
  ), y_pos = 102, xmin = 1, xmax = 2)

# 绘图手动添加标注
demo %>% ggplot(aes(x=factor(status,c("Pre","Post")),y=percent,group=id)) + 
  ylim(0,105) +
  geom_point(size = 2, aes(color = status)) + 
  geom_line() + 
  facet_grid(~ gender,switch = "x") +
  theme(legend.position = "none",
        axis.title.x = element_blank(),
        strip.placement = "outside",
        strip.text.x = element_text(angle=0)) +
  geom_signif(data = p_val,
              aes(xmin = xmin, xmax = xmax, annotations = label, y_position = y_pos),
              manual = TRUE,
              tip_length = 0,
              inherit.aes = FALSE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 10:36:02