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

使用facet_wrap绘图并比较群体:添加t检验显著性标记需求

解决方案

步骤1:计算两组各指标的t检验显著性结果

先针对subset1和subset2分别做独立样本t检验,提取p值并转换为常用的显著性标记:

library(tidyverse)

# 计算subset1的t检验
t1 <- t.test(df1$subset1, df2$subset1)
# 计算subset2的t检验
t2 <- t.test(df1$subset2, df2$subset2)

# 整理标注用的数据框
anno_df <- data.frame(
  name = c("subset1", "subset2"),
  p_val = c(t1$p.value, t2$p.value),
  pt = "Dz" # 指定仅在疾病组分面显示标注
)

# 给p值匹配显著性标记
anno_df$sig <- case_when(
  anno_df$p_val < 0.001 ~ "***",
  anno_df$p_val < 0.01 ~ "**",
  anno_df$p_val < 0.05 ~ "*",
  TRUE ~ "ns"
)

# 设置标注的y轴位置(取疾病组对应指标最大值加偏移量,避免和数据重叠)
anno_df$y_pos <- c(max(df2$subset1) + 0.5, max(df2$subset2) + 0.5)

步骤2:在分面图中添加显著性标注

将标注数据整合到原绘图代码中,通过geom_text指定仅在Dz分面显示标注:

# 原数据整理代码
full <- rbind(pivot_longer(df1,-pt), pivot_longer(df2,-pt))

# 绘图并添加显著性标注
ggplot(full, mapping = aes(x = name, y = value, fill=name)) +
  geom_violin() +
  geom_jitter(shape = 16, position = position_jitter(0.3)) +
  facet_wrap(~pt) +
  # 添加显著性标注
  geom_text(data = anno_df, aes(x = name, y = y_pos, label = sig), 
            size = 5, fontface = "bold") +
  # 可选:扩展y轴范围,确保标注完全显示
  expand_limits(y = max(anno_df$y_pos) + 0.2)

补充说明

  • 显著性标记规则可根据需求调整(比如自定义p值阈值)
  • y_pos的偏移量可以根据你的数据分布灵活修改,保证标注在图上方且不遮挡数据点
  • 如果两组方差不齐,可改用t.test(..., var.equal = FALSE)执行Welch检验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 06:53:21