2017-04-21 80 views
1

我正在嘗試使用ggplot2創建堆積條形圖,標籤顯示變量的累計和。但酒吧堆放的順序錯誤,所以標籤與酒吧不匹配。無法更改堆積條形圖中的訂單

該數據集是cabbage_exp來自gcookbook包。

該過程如下所示。

我第一次使用排列先訂單數據由品種第一,然後按日期。然後我用ddply創建一個新的列label_y反映重量累計總和,通過品種分組。

ce <- arrange(cabbage_exp, Cultivar, Date) 

ce <- ddply(ce, "Cultivar", transform, label_y = cumsum(Weight)) 

經過上述兩步,數據看起來像這樣。

Cultivar Date Weight  sd n   se label_y 
1  c39 d16 3.18 0.9566144 10 0.30250803 3.18 
2  c39 d20 2.80 0.2788867 10 0.08819171 5.98 
3  c39 d21 2.74 0.9834181 10 0.31098410 8.72 
4  c52 d16 2.26 0.4452215 10 0.14079141 2.26 
5  c52 d20 3.11 0.7908505 10 0.25008887 5.37 
6  c52 d21 1.47 0.2110819 10 0.06674995 6.84 

然後我使用下面的代碼創建了barplot。

ggplot(data=ce, aes(x=Cultivar, y=Weight, fill=Date)) + 
geom_bar(stat="identity") + geom_text(aes(y=label_y, label=label_y), 
vjust=1.5, colour="white") 

該圖如下所示。 d16,d20和d21的條形碼順序不正確。

enter image description here

我然後試圖改變日期的順序,並使用下面的代碼再生的曲線圖。但該圖並未改變。

ggplot(data=ce, aes(x=Cultivar, y=Weight, fill=Date, order=desc(Date))) + 
geom_bar(stat="identity") + geom_text(aes(y=label_y, label=label_y), 
vjust=1.5, colour="white") 

我不確定我哪裏出錯了。任何幫助將不勝感激。

非常感謝。

+0

我設法通過使用'ce < - arrange(cabbage_exp,Cultivar,desc(Date))修改** Date **的順序來找到解決方案。 )'。這樣,條形圖至少與累積和標籤相對應通過這樣做,在* d16 *,* d20 *和* d21 *之間,* d16 *具有最大的累計和,這是不合邏輯的。 –

+0

使'日期'成爲所需順序的級別。 – alistaire

+0

如果您希望堆棧順序從下到上而不是從上到下,請參閱'geom_bar'中的'position = position_stack(reverse = TRUE)'。 – aosmith

回答

0

您的標籤與類別不對應的原因是您正在根據y截距繪製標籤,而不是基於類別對應關係。所以最高的截距值始終位於最高點。

所以,你只需要調用標籤作爲ggplot的一部分(AES ...打電話說:「對於每個類別,把這個對應的文本就可以了」。

#try this 

ggplot(data = ce, aes(x = Cultivar, y = Weight, fill = Date, label = label_y)) + 
    geom_bar(stat = "identity") + 
    geom_text(size = 3, position = position_stack(vjust = 0.5)) #play with position to control where the text is placed. 

what you want

(也會鼓勵你練習良好的代碼縮進以提高可讀性)

+0

感謝@griffmer的建議。它有點作用,但因爲標籤表示累積和,所以從底部堆棧到頂部堆棧會更好,累積總和會增加。由aosmith提供的建議完美地工作:) –