【问题标题】:Subcategory ggplot2 legend子类别 ggplot2 图例
【发布时间】:2014-06-20 18:14:20
【问题描述】:

我将此作为我的第一个问题发布,请耐心等待。我有这个数据框。

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()

它看起来像这样

我想对图例进行子分类,以便 t 具有类的名称,并在其下方具有每个属的每种颜色。例如,它可能看起来像两个图例,一个是红环菌目,一个是伯克氏菌目,其下有各自的属和颜色。如果可能的话,我想保持颜色的顺序。 ggplot2 可以吗?

【问题讨论】:

  • ggplot 中的基本设计是one scale per aesthetic。因此需要各种丑陋程度的变通方法,通常涉及创建一个或多个绘图对象,操作对象的各种组件,然后从被操作的对象生成新的绘图。

标签: r ggplot2


【解决方案1】:

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

还有两个问题:

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

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

我不得不承认,过去这些问题对我来说解决起来有些乏味,所以我将把它留给你来解决。 stackoverflow 中有一个问题可以解决这些其他问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-24
    • 2016-03-27
    • 1970-01-01
    • 2018-07-19
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多