0

我想手动更改堆叠条形图的顺序,以使我的标签可读,这些标签的观察结果很少,以至于它们彼此重叠。我的目标是将顺序设置为“未分类”、“真菌”、“绿色植物”,以将几乎没有观察到的条形彼此分开。

我在这里尝试了建议的解决方案,但它不起作用。也许我错过了什么?

levels(as.factor(totaltibble$kingdom))
[1] "Fungi"         "unclassified"  "Viridiplantae"

phytibble <- psmelt(physeq_comp)
totaltibble <-phytibble %>%
  group_by(Sample, superkingdom, kingdom)%>%
  summarize(sum(Abundance))

        ggplot(totaltibble, aes(superkingdom, `sum(Abundance)`, fill=factor(kingdom, levels=c("unclassified", "Fungi", "Viridiplantae"))))+
      geom_col(aes(fill=kingdom))+
      scale_y_continuous("Anzahl der Reads", labels = comma_format(big.mark = ".", decimal.mark = ","))+
      scale_fill_manual("Reich", labels = c("Fungi", "unklassifiziert", "Viridiplantae"), values = wes_palette("Darjeeling1") )+
      scale_x_discrete("Domäne", labels = c("Backteria", "Eukaryota", "unklassifiziert", "Viren"))+
      ggtitle("Absolute Häufigkeit nach Reich und Domäne")+
       facet_grid(~Sample, labeller=(Sample=sample_labeller))+
      geom_text(aes(label=`sum(Abundance)`), vjust=1.6)+
      theme_bw()

剧情

我创建情节的对象:

structure(list(Sample = c("MB5_2020_nano", "MB5_2020_nano", "MB6_2020_nano", 
"MB6_2020_nano", "MB5_2020_ill", "MB5_2020_ill", "MB6_2020_ill", 
"MB6_2020_ill", "MB5_2020_nano", "MB6_2020_nano", "MB5_2020_ill", 
"MB5_2020_nano", "MB5_2020_nano", "MB6_2020_ill", "MB6_2020_nano", 
"MB6_2020_nano", "MB6_2020_ill", "MB5_2020_nano", "MB6_2020_nano", 
"MB5_2020_ill", "MB6_2020_ill", "MB5_2020_ill", "MB5_2020_ill", 
"MB6_2020_ill"), superkingdom = c("Eukaryota", "unclassified", 
"Eukaryota", "unclassified", "unclassified", "Eukaryota", "Eukaryota", 
"unclassified", "Bacteria", "Bacteria", "Eukaryota", "Eukaryota", 
"Eukaryota", "Eukaryota", "Eukaryota", "Eukaryota", "Bacteria", 
"Viruses", "Viruses", "Bacteria", "Eukaryota", "Eukaryota", "Viruses", 
"Viruses"), totalreads = c(740180, 740180, 220406, 220406, 122691, 
122691, 41791, 41791, 740180, 220406, 122691, 740180, 740180, 
41791, 220406, 220406, 41791, 740180, 220406, 122691, 41791, 
122691, 122691, 41791), kingdom = c("Fungi", "unclassified", 
"Fungi", "unclassified", "unclassified", "Fungi", "Fungi", "unclassified", 
"unclassified", "unclassified", "unclassified", "unclassified", 
"Viridiplantae", "unclassified", "unclassified", "Viridiplantae", 
"unclassified", "unclassified", "unclassified", "unclassified", 
"Viridiplantae", "Viridiplantae", "unclassified", "unclassified"
), abundance = c(440891, 295055, 126035, 93059, 61774, 60325, 
28618, 12905, 3548, 1021, 591, 437, 224, 220, 191, 93, 47, 25, 
7, 1, 1, 0, 0, 0), percent = c(59.5653759896241, 39.8626009889486, 
57.1831075379073, 42.2216273604167, 50.3492513713312, 49.1682356489066, 
68.4788590844919, 30.8798545141298, 0.479342862546948, 0.463236028057312, 
0.481697924053109, 0.0590396930476371, 0.0302629090221298, 0.526429135459788, 
0.0866582579421613, 0.0421948585791675, 0.112464406211864, 0.00337755681050555, 
0.0031759570973567, 0.000815055709057714, 0.0023928597066354, 
0, 0, 0)), row.names = c(NA, -24L), groups = structure(list(Sample = c("MB5_2020_ill", 
"MB5_2020_ill", "MB5_2020_ill", "MB5_2020_ill", "MB5_2020_nano", 
"MB5_2020_nano", "MB5_2020_nano", "MB5_2020_nano", "MB6_2020_ill", 
"MB6_2020_ill", "MB6_2020_ill", "MB6_2020_ill", "MB6_2020_nano", 
"MB6_2020_nano", "MB6_2020_nano", "MB6_2020_nano"), superkingdom = c("Bacteria", 
"Eukaryota", "unclassified", "Viruses", "Bacteria", "Eukaryota", 
"unclassified", "Viruses", "Bacteria", "Eukaryota", "unclassified", 
"Viruses", "Bacteria", "Eukaryota", "unclassified", "Viruses"
), totalreads = c(122691, 122691, 122691, 122691, 740180, 740180, 
740180, 740180, 41791, 41791, 41791, 41791, 220406, 220406, 220406, 
220406), .rows = structure(list(20L, c(6L, 11L, 22L), 5L, 23L, 
    9L, c(1L, 12L, 13L), 2L, 18L, 17L, c(7L, 14L, 21L), 8L, 24L, 
    10L, c(3L, 15L, 16L), 4L, 19L), ptype = integer(0), class = c("vctrs_list_of", 
"vctrs_vctr", "list"))), row.names = c(NA, -16L), class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"))
4

1 回答 1

0

问题似乎是您有两个不同的位置可以映射fillkingdom

  1. 在顶部调用内ggplot(... aes(fill=factor(kingdom...
  2. 在对 geom 的调用中:geom_col(aes(fill=kingdom))

决定映射的层次结构ggplot在通用映射之前使用geom调用中的映射。这里发生的事情geom_col(aes(fill=kingdom))是覆盖你在顶级电话中所说的内容。它将映射未重构的kingdom列而不是重构的列。

简单的解决方法是使用geom_col().geom_col(aes(fill=kingdom))

如果您愿意,可以选择替代修复:

  • kingdom绘图前更改:totaltibble$kingdom <- factor(totaltibble$kingdom, levels=c("unclassified", "Fungi", "Viridiplantae"))

  • 复制aes(fill=...用于在语句中ggplot()使用的geom_col()语句。

  • 删除fill=语句ggplot()并将其移至geom_col().

在第一行中ggplot()您引用并更改它,但您也在第二行中说明它:geom_col(aes(fill=kingdom)). 由于您在 中重述geom_col()ggplot因此将使用 geom 调用中所述的通用映射语句。只需将其删除geom_col()-那里不需要它并且会引起问题。所以,只是geom_col()没有aes(). 或者,kingdom在绘制之前进行更改或在for中使用相同的factor(... 代码。aes()geom_col()

于 2021-04-18T13:59:27.523 回答