2013-06-26 90 views
13

我使用ggplot2創建了一個堆積酒吧的情節,我有一個非常惱人的問題。 以前有幾個類似的問題,但通過示例代碼後,我無法弄清楚我做錯了什麼。ggplot2 barplot中的酒吧的順序和顏色

我想製作圖形,以便根據它們的Biogeographic.affinity(從上到下= Bassian,Widespread,Torresian和Eyrean)按以下順序堆疊條形圖。酒吧的顏色應該是:(Bassian = drakgrey,Widespread = lightgrey,Torresian =白色,Eyrean =黑色)。

這是該數據集的樣子:

biogeo 
     Site Biogeographic.affinity Rank Number.of.species Total.Species Percent 
    1  A    Bassian 1     1   121 0.8264463 
    2  A     Eyrean 4    39   121 32.2314050 
    3  A    Torresian 3    62   121 51.2396694 
    4  A    Widespread 2    19   121 15.7024793 
    5 DD    Bassian 1     1   128 0.7812500 
    6 DD     Eyrean 4    46   128 35.9375000 
    7 DD    Torresian 3    63   128 49.2187500 
    8 DD    Widespread 2    18   128 14.0625000 
    9 E_W    Bassian 1     1   136 0.7352941 
    10 E_W     Eyrean 4    54   136 39.7058824 
    11 E_W    Torresian 3    65   136 47.7941176 
    12 E_W    Widespread 2    16   136 11.7647059 
    13 KS    Bassian 1     2   145 1.3793103 
    14 KS     Eyrean 4    63   145 43.4482759 
    15 KS    Torresian 3    62   145 42.7586207 
    16 KS    Widespread 2    18   145 12.4137931 
    17 Z_Ka    Bassian 1     1   110 0.9090909 
    18 Z_Ka     Eyrean 4    64   110 58.1818182 
    19 Z_Ka    Torresian 3    31   110 28.1818182 
    20 Z_Ka    Widespread 2    14   110 12.7272727 

這是迄今爲止我所編寫的代碼(包括我的一些失敗的嘗試糾正問題的)。

ggplot(data=biogeo, aes(x=Site, y=Percent, fill=Biogeographic.affinity)) + geom_bar(stat="identity", colour="black")+ 
    scale_fill_grey() + ylab("Percent") + xlab("Location") +  
    theme_bw()+ theme(panel.grid.minor = element_blank()) 

這給出了基本圖,但顏色和順序仍然是錯誤的。要糾正我試驗的順序,但這並沒有改變任何東西(受抑)!:

newone <- transform(biogeo, Biogeographic.affinity = factor(Biogeographic.affinity), Rank = factor(Rank, levels = 1:4)) 

至於顏色變化我都試過,似乎工作,但所有的看起來像順序仍然是錯的!

cols<- c("Bassian"="darkgrey","Widespread"="lightgrey", "Torresian"="white", "Eyrean"="black") #designates the colors of the bars 
ggplot(data=newone, aes(x=Site, y=Percent, fill=Biogeographic.affinity)) + geom_bar(stat="identity", colour="black")+ 
    scale_fill_manual(values = cols) + ylab("Percent") + xlab("Location") +  
    theme_bw()+ theme(panel.grid.minor = element_blank()) 

請大家幫忙。

回答

14

在ggplot2中堆疊barplot中繪製條形圖(從底部到頂部)的順序基於定義組的係數的順序。所以Biogeographic.affinity因子必須重新排序。一般來說,我們使用reorder(如果我們想要按照連續的水平排列因子),但在這裏我將創建一個與您嘗試做的相似的新的有序因子。

biogeo <- transform(biogeo, 
       Biog.aff.ord = factor(
        Biogeographic.affinity , 
        levels=c('Bassian','Widespread','Torresian', 'Eyrean'), 
        ordered =TRUE)) 

現在,如果你通過定義aes_group_order你得到預期的結果Biog.aff.ord爲了填補使用Biog.aff.ord而不是原來的因子和覆蓋默認分組順序您barplot:

cols <- c(Bassian="darkgrey",Widespread="lightgrey", 
      Torresian="white", Eyrean="black") 
ggplot(data=biogeo, aes(x=Site, y=Percent, 
     order=Biog.aff.ord)) + ##!! aes_group_order 
    geom_bar(stat="identity", colour="black", 
     aes(fill=Biog.aff.ord)) + 
    scale_fill_manual(values = cols) 

enter image description here

+0

@IDelToro級別的順序?爲什麼? – agstudy

+9

在ggplot2的當前版本中,排序因子水平不再適用於具有'stat =「identity」'和'position =「stack」'或'position =「fill」'的柱狀圖的特定情況。 (另外,我相信'order'美學已經消失了。)相反,您現在必須實際將數據框本身排序爲「正確」的順序。見[這裏](https://github.com/hadley/ggplot2/issues/1593)。 – joran