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

如何修复ggerrorplot中stat_pvalue_manual显著性标记位置异常

问题根源

p1显著性标记错位是因为add_xy_position()默认计算坐标时未匹配分组图的位置闪避(dodge)规则:当x轴映射为dose、同时通过color映射supp/grp分组时,同个dose下的多组图元会沿x轴做等距偏移排布,但自动生成的xmin、xmax默认对齐dose的原始轴刻度位置,未叠加分组对应的偏移量,最终导致显著性条和图元错位。
对照场景p2能正常显示,是因为分面后每个分面的x轴仅映射supp变量,不存在同x刻度下的分组闪避,自动计算的坐标可以直接适配。

修复方法

核心是在add_xy_position()步骤明确指定和绘图一致的dodge宽度,ggpubr分组图默认闪避宽度为0.8,直接传入即可匹配位置。

修复原p1错位问题的代码

library(tidyverse)
library(rstatix)
library(ggpubr)

df <- ToothGrowth
grp<-rep(c("a","b","c"), 10)
df$grp <- grp

# 重新计算统计检验结果,指定dodge参数
stat.test_len <- df %>%
  group_by(dose) %>%
  dunn_test(len ~ supp) %>%
  add_xy_position(dodge = 0.8) # 关键参数,匹配绘图默认闪避宽度

# 重绘p1,显著性标记即可正常对齐
p1 <- ggerrorplot(df, x = "dose", y = "len", 
                  desc_stat = "mean_sd", color = "supp")+
  stat_pvalue_manual(stat.test_len, label = "p.adj.signif",
                     tip.length = 0,
                     hide.ns = TRUE)

适配最终绘图需求的代码

最终需求为x轴展示dose、按grp的3个水平映射颜色、添加同dose下grp组间比较的显著性标记,代码如下:

# 计算grp组间的差异检验结果,同样指定dodge宽度
stat.test_grp <- df %>%
  group_by(dose) %>%
  dunn_test(len ~ grp) %>%
  add_xy_position(dodge = 0.8)

# 绘制最终图,多组比较时添加step.increase避免显著性条重叠
p_final <- ggerrorplot(df, x = "dose", y = "len",
                       desc_stat = "mean_sd", color = "grp") +
  stat_pvalue_manual(stat.test_grp, label = "p.adj.signif",
                     tip.length = 0,
                     hide.ns = TRUE,
                     step.increase = 0.12)
注意事项
  • 如果绘图时手动自定义了闪避宽度,比如设置position = position_dodge(width = 0.6),需要把add_xy_position()里的dodge参数改成相同数值,否则仍会出现偏移。
  • 同个dose下组对较多、显著性条重叠时,可调整step.increase的数值,数值越大纵向间距越大。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:09:22