子类别ggplot2图例

时间:2014-06-20 18:14:21

标签: r ggplot2

我发布这是我的第一个问题,所以请耐心等待。我有这个数据框。

df <- data.frame(Class =  c("Burkholderiales", "Burkholderiales", "Burkholderiales", "unclassified", "Burkholderiales", "Burkholderiales", "Rhodocyclales",   "Burkholderiales", "Burkholderiales", "Burkholderiales", "Rhodocyclales", "Rhodocyclales", "Burkholderiales", "Rhodocyclales",   "Rhodocyclales",   "Rhodocyclales", "Burkholderiales", "Rhodocyclales",   "Rhodocyclales",   "Rhodocyclales", "Burkholderiales", "Burkholderiales", "Burkholderiales", "Burkholderiales", "Rhodocyclales",   "Rhodocyclales",   "Burkholderiales", "Rhodocyclales", "Burkholderiales", "Rhodocyclales"),
Genus = c("unclassified", "unclassified", "unclassified", "unclassified", "unclassified", "unclassified", "unclassified", "unclassified", "unclassified", "Paucibacter", "Dechloromonas", "unclassified", "unclassified", "unclassified", "Dok59", "Dechloromonas", "Hydrogenophaga", "Dechloromonas", "Uliginosibacterium", "Propionivibrio", "Hydrogenophaga", "unclassified", "Hydrogenophaga", "unclassified", "Sulfuritalea", "Dechloromonas", "unclassified", "Propionivibrio", "unclassified", "Dechloromonas"))

我使用此代码制作了一个情节

library("ggplot2")
ggplot(df, aes(x = Class, fill = Genus)) +
  geom_bar() +
  coord_flip()

它看起来像这样

enter image description here

我想要对图例进行细分,以便t具有类的名称,并且在下面它具有每个属的每种颜色。例如,它可能看起来像两个传说,一个用于Rhodocyclales,一个用于Burkholderiales,其中有相应的属和颜色。如果可能的话,我想保持颜色的顺序。这可能与ggplot2一起使用吗?

1 个答案:

答案 0 :(得分:0)

这是我过去使用过的解决方法。它并不完美,仍需要一些调整,但至少它可以根据需要分离图例。假设你有如上定义的data.frame df,这里有一种分割图例的方法。

library(ggplot2)
library(plyr)
library(gtable)
library(gridExtra)

p_list <- dlply(df, .(Class), function(x) {
      library(ggplot2)
      x$Genus  <-  format(x$Genus, width=30)
      ggplot(aes(x = Class, fill = Genus), data=x) + 
      geom_bar() + coord_flip() + ylim(0, 15) +
      scale_x_discrete(labels=function(x) format(x, width = 30))
})
grob_list <- llply(p_list, ggplotGrob)
grid.arrange(grob_list[[1]], grob_list[[2]], grob_list[[3]], ncol=1)

enter image description here

还有两个问题:

  1. 颜色可能不匹配图,因此不同图中的相同属可能会有不同的颜色。您可以尝试使用Genus字段的因子,因此每个图中的类别都相同。

  2. 由于现在传说和x轴标签位于不同的图中,因此对齐两个图表有点棘手。我通过格式函数调用设置一个恒定的宽度来添加一些缓冲区。但是,正如您所看到的,图表x轴仍未正确对齐。

  3. 我不得不承认,过去这些问题对我来说有点单调乏味,所以我会留给你弄清楚。 stackoverflow中有一个问题可以解决这些其他问题。