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

