使用 geom_bar by bar 为 ggplot 添加统计显着性

Add statistical significance to ggplot with geom_bar by bar

我在 R 中表示一个带有 geom_bar 的条形图,它显示两个离散的 x 水平和一个连续的 y 水平面。我想用星星来显示堆叠在一个位置的组之间的显着性水平(p 值)。 我通常用stat_compare_means来进行组间比较,但是当组堆在一起而不是相邻的时候我就不能表示了。

我的代码与下面发布的代码类似。我想通过比较 B 的值在每一列的顶部添加开始。我想要表示的统计数据是下面用 compare_means

计算的统计数据
library(tidyverse)
library(ggpubr)

dataplot <-
  data.frame(
    A = rep(c("A1", "A2"), 8),
    B = rep(c(rep("B1", 4), rep("B2", 4)),2),
    C = c(rep("C1",8), rep("C2",8)),
    value = rep(c(1, 5, 2, 6, 8, 15, 9, 16),2)
  ) 


ggplot(dataplot, aes(A, value, fill = B, color = B)) +
  geom_bar(
    position = "identity",
    stat = "summary",
    alpha = .5,
    fun = mean
  ) +
  geom_point(
    aes(x = A),
    size = 2,
    stroke = 0.5,
    position = "jitter"
  )+
  facet_wrap(~C)

compare_means(value ~ B, group.by = c("A", "C"), data = dataplot, method = "t.test") 

这是我的情节:

这是获得的数据。

# A tibble: 4 x 10
  A     C     .y.   group1 group2       p p.adj p.format p.signif method
  <chr> <chr> <chr> <chr>  <chr>    <dbl> <dbl> <chr>    <chr>    <chr> 
1 A1    C1    value B1     B2     0.0101   0.02 0.010    *        T-test
2 A2    C1    value B1     B2     0.00496  0.02 0.005    **       T-test
3 A1    C2    value B1     B2     0.0101   0.02 0.010    *        T-test
4 A2    C2    value B1     B2     0.00496  0.02 0.005    **       T-test

这就是我想要的:

我已经读过Put stars on ggplot barplots and boxplots - to indicate the level of significance (p-value),但是当这些组被起球时,这个解决方案对我不起作用,只有当它们彼此相邻时

一个选项是通过创建向量来定义重要符号的 y 位置。您可以使用 geom_textlabel 来分配栏顶部的文本,如下所示:

library(tidyverse)
library(ggpubr)
stats <- compare_means(value ~ B, group.by = c("A", "C"), data = dataplot, method = "t.test")

ggplot(dataplot, ) +
  geom_bar(aes(A, value, fill = B, color = B),
    position = "identity",
    stat = "summary",
    alpha = .5,
    fun = mean
  ) +
  geom_point(
    aes(x = A, y = value, fill = B, color = B),
    size = 2,
    stroke = 0.5,
    position = "jitter"
  )+ 
  geom_text(data = stats, aes(x = A, y = c(9, 16, 9, 16), label = p.signif), size = 10) +
  facet_wrap(~C) 

输出: