2014-06-20 44 views
2

我發佈這是我的第一個問題,請耐心等待。我有這個數據框。子類別ggplot2 legend

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?

+0

'ggplot'中的基本設計是[每個'aes'thetic]的一個縮放比例(https://groups.google.com/forum/#!topic/ggplot2/lDvsd4yJ0AE)。因此需要各種程度醜陋的解決方案,通常涉及創建一個或多個繪圖對象,操縱該對象的各種組件,然後從操縱的對象產生新的繪圖。 – Henrik

回答

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軸仍未正確對齊。

我不得不承認,過去這些問題對我來說有些乏味,所以我會留給你弄明白。在stackoverflow中有一個問題可以解決這些其他問題。