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

如何将emmeans生成的组间对比p值添加到ggplot箱线图上

具体操作方法

stat_pvalue_manual要求输入的数据框必须包含要对比的两组名称(group1、group2)、p值以及标注位置信息,你只需将emmeans输出的对比表做简单格式转换即可,操作步骤如下:

  • 第一步:加载必备依赖包
library(lme4)
library(emmeans)
library(tidyverse)
library(ggsignif)
  • 第二步:转换emmeans对比结果格式
    将contrast列拆分为group1和group2两列,对应要对比的两个Stage分组,同时可根据需要生成显著性星号标注:
# 提取emmeans对比结果并转换为数据框
contrast_df <- as.data.frame(emmeans(LMM.fit, pairwise ~ Stage)$contrasts) %>%
  # 按 " - " 拆分对比列,得到两个分组的名称
  separate(contrast, into = c("group1", "group2"), sep = " - ", remove = FALSE) %>%
  # 可选:生成显著性星号标注,也可直接用p.value作为标注内容
  mutate(
    sig_label = case_when(
      p.value < 0.001 ~ "***",
      p.value < 0.01 ~ "**",
      p.value < 0.05 ~ "*",
      TRUE ~ "ns"
    )
  )
  • 第三步:设置显著性标注位置
    有两种可选方案:
  1. 手动设置:根据你的箱线图y轴范围,给每个对比设置不同的y轴高度,避免标注重叠。你原有的箱线图Proportion范围为0-1,可将标注高度设置在1.05-1.4区间内。
  2. 自动设置:调用add_xy_position()函数自动计算标注位置,无需手动调整,代码如下:
contrast_df <- contrast_df %>%
  add_xy_position(x = "Stage", fun = "max")
  • 第四步:绘制带p值标注的箱线图
    你原有的箱线图如下:
    箱线图
    在原有绘图代码的基础上添加stat_pvalue_manual层即可添加p值标注,示例代码如下:
# 手动设置标注高度的绘图代码
y_positions <- c(1.05, 1.15, 1.25, 1.35, 1.1, 1.2, 1.3, 1.08, 1.18, 1.28)

ggplot(tab, aes(x = Stage, y = Proportion)) +
  geom_boxplot() +
  # 添加p值标注层
  stat_pvalue_manual(
    data = contrast_df,
    x = "group1",
    xmin = "group1",
    xmax = "group2",
    label = "sig_label", # 若要直接显示p值,此处改为"p.value"即可
    y.position = y_positions,
    tip.length = 0.01 # 调整显著性条两端短竖线的长度
  ) +
  # 调整y轴上限,留出足够空间显示标注
  ylim(NA, 1.4)

注意:请确保你的Stage变量的因子水平顺序和箱线图x轴的展示顺序完全一致,否则会出现标注错位问题。你可以用levels(tab$Stage)查看当前顺序,不一致时可通过factor(tab$Stage, levels = c("Stage1","Stage2","Stage3","Stage4","Stage5"))重新指定顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:06:04