添加p值后分面抖动图结构异常,如何维持Y轴范围不变?
解决分面箱线图添加显著性标记后Y轴范围异常的问题
核心原因
df.dunn.stat中的y.position数值过大,强制拉伸了每个分面的Y轴范围,挤占了箱线图的展示空间。
具体解决方法
方法1:动态计算每个分面的合理y.position
根据每个分面内log_titers的最大值,加上固定比例的偏移量作为该分面的p值位置,替代统一的超大数值,让p值位置适配各分面的数据范围。
示例代码:
# 按分面字段abs计算每个分面的log_titers最大值 max_y <- test1 %>% group_by(abs) %>% summarise(max_titer = max(log_titers, na.rm = TRUE)) # 将最大值合并到p值数据框,设置y.position为最大值的1.1倍(比例可根据图表调整) df.dunn.stat <- df.dunn.stat %>% left_join(max_y, by = "abs") %>% mutate(y.position = max_titer * 1.1)
方法2:用coord_cartesian固定Y轴显示范围
如果不想修改df.dunn.stat,可以通过coord_cartesian()锁定Y轴的显示区间,同时调整图表顶部边距,确保p值标签能完整显示在轴范围之外,且不会拉伸轴的缩放比例。
示例代码:
ggboxplot(test1, x = "group_classification", y = "log_titers", facet.by = "abs", add = "jitter") + stat_pvalue_manual(df.dunn.stat, label = "p.adj") + coord_cartesian(ylim = c(min(test1$log_titers, na.rm = TRUE), max(test1$log_titers, na.rm = TRUE) * 1.2)) + theme(plot.margin = margin(1, 1, 1, 1, "cm")) # 增大顶部边距容纳p值标签
内容的提问来源于stack exchange,提问作者Someone_1313
相关产品推荐
相关产品推荐

