不同x和同一组的箱线图之间的geom_signif

Posted

技术标签:

【中文标题】不同x和同一组的箱线图之间的geom_signif【英文标题】:geom_signif between boxplots of different x and same group 【发布时间】:2021-11-17 08:12:38 【问题描述】:

如何测试箱线图 x='a' 和 x='b' 之间的差异,两者都是 group='g1',然后箱线图 x='a' 和 x='b' 之间的差异都是 group=' g2'?

d = data.frame(c('a', 'a', 'a', 'a', 'b', 'b', 'b','b'),
               c(13, 12, 12, 5, 14, 6, 10, 11),
               c('g1','g2','g1','g2','g1','g2','g1','g2')) %>%
  `colnames<-`(c("x", "y", "group"))

> d
  x  y group
1 a 13    g1
2 a 12    g2
3 a 12    g1
4 a  5    g2
5 b 14    g1
6 b  6    g2
7 b 10    g1
8 b 11    g2

ggplot(d,
       aes(x, y,
           fill = group)) +
  geom_boxplot() +
  ggsignif::geom_signif(comparisons = combn(levels(factor(d$x)), 2, simplify = F))

这显示了测试“a”与“b”的结果:

但我想获得的是按组分层,如下所示:

【问题讨论】:

【参考方案1】:

一种方法是使用xgroup 变量之间的交互:

library(ggplot2)
library(dplyr)
library(ggsignif)

d %>%
  mutate(x2 = interaction(group, x)) %>%
  ggplot(aes(x2, y, fill = group)) +
  geom_boxplot() +
  geom_signif(comparisons = list(c(1, 3),
                                 c(2, 4)), 
              y_position = rep(max(d$y), 2) * c(1, 1.05))

这会更改可能不需要的 x 轴上的标签。为了使坐标轴与原始图相同,我们可以通过使用连续坐标轴并适当设置中断和标签来模拟离散坐标轴。

d %>%
  mutate(x2 = as.integer(interaction(group, x))) %>%
  ggplot(aes(x2, y, group = x2, fill = group)) +
  geom_boxplot() +
  geom_signif(comparisons = list(c(1, 3),
                            c(2, 4)),
              y_position = rep(max(d$y), 2) * c(1, 1.05)) +
  scale_x_continuous(breaks = c(1.5, 3.5), labels = c("a", "b"))

【讨论】:

谢谢,不过我得等 22 小时才能给你赏金

以上是关于不同x和同一组的箱线图之间的geom_signif的主要内容,如果未能解决你的问题,请参考以下文章

如何在具有多个组的箱线图顶部创建单独的线

组的箱线图?

如何在ggplot的箱线图中按组绘制平均值

在ggplot2中绘制两个具有相同y变量但不同x变量的箱线图

如何在r中的箱线图之间创建单独的线图

如何绘制两个不同系列的箱线图?