R 子类别ggplot2图例

R 子类别ggplot2图例,r,ggplot2,R,Ggplot2,这是我的第一个问题,请耐心听我说。我有这个数据框 df <- data.frame(Class = c("Burkholderiales", "Burkholderiales", "Burkholderiales", "unclassified", "Burkholderiales", "Burkholderiales", "Rhodocyclales", "Burkholderiales", "Burkholderiales", "Burkholderiales", "Rhodoc

这是我的第一个问题,请耐心听我说。我有这个数据框

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"))
看起来是这样的


我想对图例进行子分类,这样t就有了类的名称,下面它就有了每个属的每种颜色。例如,它可能看起来像两个传说,一个是关于红细胞藻的,另一个是关于伯克霍尔德亚目的,下面有各自的属和颜色。如果可能的话,我想保持颜色的顺序。ggplot2是否可以实现这一点?

这是我过去使用过的一种解决方法。它并不完美,仍然需要一些调整,但至少它可以根据您的需要分隔图例。假设您拥有上面定义的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)
库(ggplot2)
图书馆(plyr)
图书馆(gtable)
图书馆(gridExtra)

p_在
ggplot
is中列出基本设计。因此,需要进行不同程度的丑陋处理,通常包括创建一个或多个绘图对象,操纵对象的各种组件,然后从操纵的对象生成新的绘图。
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)