如何解决将 ggpubr 在分面 ggplot 中的显着性水平的位置调整到 boxplot 的顶部
我正在生成一个包含不同组的多面图,我想将不同组的平均值与对照样本进行比较。我有广泛的值,并希望以编程方式将“显着性标签”放置在每个箱线图的顶部。
这是一些玩具数据。
library(ggpubr)
ggboxplot(mtcars,x = "am",y = "mpg") +
facet_wrap(~vs) +
stat_compare_means(aes(label = ..p.signif..),method = "t.test",ref.group = "0")
我想将星号放在框顶部的多面图 0 上,就像在图 1 中一样。 在这种情况下,我可以通过以下方式提取每个箱线图的最大值:
lab_coords = mtcars %>% group_by(am,vs) %>%
summarize(max_mpg = max(mpg)) %>% pull(max_mpg)
lab_coords
[1] 19.2 24.4 26.0 33.9
当我将标签坐标传递给 stat_compare_means 时,我无法按正确的顺序放置它们:
ggboxplot(mtcars,y = "mpg") +
facet_wrap(~vs) +
stat_compare_means(aes(label = ..p.signif..),ref.group = "0",label.y = lab_coords)
有没有办法将不同的 ylabel 位置传递到每个方面?
解决方法
一种解决方案是单独计算统计数据,然后用 p 值注释绘图。这具有考虑多重测试的优势(您可以使用调整后的 p 值,而不是“不正确”的未调整 p 值),例如
library(ggpubr)
library(tidyverse)
library(ggsignif)
anno_df <- compare_means(mpg ~ am,group.by = "vs",data = mtcars,method = "t.test") %>%
mutate(max_mpg = mtcars %>%
group_by(am,vs) %>%
summarize(max_mpg = max(mpg)*1.2) %>%
filter(vs == 1) %>%
ungroup()) %>%
mutate(p.adj.sig = ifelse(p.adj < 0.001,"***",ifelse(p.adj < 0.01,"**",ifelse(p.adj < 0.05,"*","ns"))))
ggboxplot(mtcars,x = "am",y = "mpg",facet.by = "vs") +
ggsignif::geom_signif(data=anno_df,aes(xmin=group1,xmax=group2,annotations=p.adj,y_position=max_mpg[["max_mpg"]]),manual=TRUE)
在 github 上有很多关于这个问题和其他潜在解决方案的讨论:https://github.com/kassambara/ggpubr/issues/65
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。