【问题标题】:Error when trying to map aesthetics with geom_signi尝试使用 geom_signi 映射美学时出错
【发布时间】:2022-07-08 12:19:39
【问题描述】:

我正在尝试创建一个分面箱线图,其显着性水平用星号表示,如“***”。 问题是,尝试添加 geom_signif 层时出现错误。

Warning message: 忽略未知美学:xmin、xmax、注释、y_position、map_signif_level。

这是我的数据:

 veg_un <- structure(list(Datum = structure(c(3L, 3L, 1L, 1L, 3L, 3L, 2L, 
3L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 3L, 1L, 2L, 2L, 2L), .Label = c("2021-04-08", 
"2021-05-17", "2021-07-07"), class = "factor"), Soll = c("1192", 
"1192", "149", "2484", "552", "172", "1192", "1189", "2484", 
"552", "552", "552", "119", "1192", "2484", "1202", "149", "552", 
"1202", "1202"), Entfernung = structure(c(2L, 1L, 1L, 2L, 2L, 
2L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L), .Label = c("2", 
"5"), class = "factor"), DGUnkraut = c(0, 1.3, 0.3, 3.4, 0, 2.5, 
4, 0, 1, 0.9, 0, 0.8, 0.5, 3, 1, 0.2, 0.2, 4, 0.5, 5)), row.names = c(NA, 
-20L), class = "data.frame")

这是我目前的代码。

library(tidyverse)
library(ggsignif)
library(ggpubr)

anno_df <- compare_means(DGUnkraut ~ Entfernung, group.by = "Soll", data = veg_un, p.adjust.method = "holm") %>%
  mutate(y_pos = 7, p.adj = format.pval(p.adj, digits = 2))

ggplot(veg_un, aes(x=Entfernung, y=DGUnkraut)) + 
  geom_boxplot(position=position_dodge()) + 
  geom_point(aes(color=Entfernung), position=position_jitterdodge()) + 
  facet_wrap(~Soll) + 
  theme_minimal()+
  ggsignif::geom_signif(
    inherit.aes = F,
    data=anno_df, 
    aes(xmin=group1, xmax=group2, annotations=p.adj, y_position=y_pos, map_signif_level = T),
    manual=TRUE)

我不知道为什么会这样。另外,p值太高了。我试着用y_position来修改这个,但是由于我无法控制美观,所以它不起作用。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我会尝试其中一种

    anno_df <- compare_means(DGUnkraut ~ Entfernung, group.by = "Soll", data = veg_un, p.adjust.method = "holm") %>%
      mutate(y.position = 7, p.adj = format.pval(p.adj, digits = 2))
    
    p <- ggplot(veg_un, aes(x=Entfernung, y=DGUnkraut)) + 
      geom_boxplot(position=position_dodge()) + 
      geom_point(aes(color=Entfernung), position=position_jitterdodge()) + 
      facet_wrap(~Soll) + 
      theme_minimal() 
      
    p + ggsignif::geom_signif(comparisons = list(c("2", "5")), map_signif_level = T)
    p + ggpubr::stat_pvalue_manual(anno_df, label = "p.adj") 
    

    【讨论】:

      【解决方案2】:

      我看到了几件事。

      1. 您的 p.adj 始终为 1。所以我不能用*创建标签

      2. 虽然您收到了一些警告,但我没有收到任何错误,并且代码正在执行我的预期。

      3. 您可以调整 ylim 的大小并定义标签的高度。

      图书馆(tidyverse) 库(ggsignif) 库(ggpubr)

        anno_df <- compare_means(DGUnkraut ~ Entfernung, group.by = "Soll", data = veg_un, p.adjust.method = "holm") %>%
          mutate(y_pos = 5, label = format.pval(p, digits = 2))
        
        ggplot(veg_un, aes(x=Entfernung, y=DGUnkraut)) + 
          geom_boxplot(position=position_dodge()) + ylim(0,7) + 
          geom_point(aes(color=Entfernung), position=position_jitterdodge()) + 
          facet_wrap(~Soll) + 
          theme_minimal()+
          ggsignif::geom_signif(
            inherit.aes = F,
            data=anno_df, 
            aes(xmin=group1, xmax=group2, annotations=label, y_position=y_pos, map_signif_level = T),
            manual=TRUE)
      

      我得到了这张图片。我希望是你要找的。​​p>

      【讨论】:

      • 非常感谢您的回复。关于你的观点1。是的,在这个样本中每个 p.adj = 1,但在我的实际 df 中也有较低的 p 值。 2. 那是我不明白的。我收到上面提到的错误。 3. 是的,我不能这样做,因为 ggplot 以某种方式忽略了我的 aes() 调用,其中还包括 y_position..
      • 如果你分享你拥有的数据,我可以尝试创建情节。
      • 有没有办法直接与您共享我的数据?当我点击你的个人资料时,我似乎无法给你发 DM。它是一个巨大的数据集,所以我只是使用 slice_sample 来创建一个小的代表。谢谢!
      • 你可以通过我的 github 账号给我写信。我不想在这里发布我的电子邮件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多