将ggsignif与组合的条形图一起使用,并且facet_wrap无法正常工作

时间:2019-05-20 10:54:39

标签: r ggplot2

我正在尝试使用ggsignif使用facet_wrap在成对的条形图顶部显示重要的星星。但是,我无法找到一种在每个方面显示一个重要条的方法。这是我的意思:

    dat <- data.frame(Group = c("S1", "S1", "S2", "S2"),
                  Sub   = c("A", "B", "A", "B"),
                  Value = c(3,5,7,8))

    ggplot(dat, aes(Group, Value)) +
      geom_bar(aes(fill = Sub), stat="identity", position="dodge", width=.5) +
      geom_signif(y_position=c(5.3, 8.3), xmin=c(0.8, 1.8), xmax=c(1.2, 2.2),
              annotation=c("**", "NS"), tip_length=0) +
      scale_fill_manual(values = c("grey80", "grey20")) +
      facet_grid(~ Group, scales = "free")

output

有没有办法确保每个方面都有自己的重要性标签?

2 个答案:

答案 0 :(得分:2)

在我看来,主要问题是geom_signif层不知道变量将进入哪个面板,因为它没有提供data参数。

我对软件包不那么熟悉,但是文档似乎建议使用manual = TRUE将其绘制在不同的方面。这样做并针对抛出的错误进行一些调整,我可以进行以下工作:

ggplot(dat, aes(Group, Value)) +
  geom_bar(aes(fill = Sub), stat="identity", position="dodge", width=.5) +
  geom_signif(data = data.frame(Group = c("S1","S2")),
              aes(y_position=c(5.3, 8.3), xmin=c(0.8, 0.8), xmax=c(1.2, 1.2),
              annotations=c("**", "NS")), tip_length=0, manual = T) +
  scale_fill_manual(values = c("grey80", "grey20")) +
  facet_grid(~ Group, scales = "free")

enter image description here

关键似乎在于提供一个data参数,分面代码可以从中推断出哪个面板中的哪个位。

答案 1 :(得分:0)

您是否考虑过使用ggpubr和stat_compare_meanshttps://rpkgs.datanovia.com/ggpubr/reference/stat_compare_means.html

由于您的示例仅包含一个观测值pr。栏不起作用,但是如果您包含多个观察值,您将获得所需的结果。

重写测试数据:

dat <- data.frame(A_S1 = sample(rnorm(20, 3, 1)),
              B_S1 = sample(rnorm(20, 5, 1)),
              A_S2 = sample(rnorm(20, 7, 1)),
              B_S2 = sample(rnorm(20, 8, 1))) %>% 
tidyr::gather("G", "value") %>% 
tidyr::separate("G", c("Sub", "Group"))

使用ggpubr软件包绘制数据

ggerrorplot(dat, x = "Sub", y = "value",
            facet.by = "Group",
            error.plot = "pointrange") +
stat_compare_means(aes(label = ..p.signif..),
                   method = "t.test", ref.group = "A")

enter image description here