2013-10-15 227 views
0

我在ggplot2上掙扎了一下以繪製在同一個圖上 1)表示兩個植物品種的產量的條形圖 2)代表由上述兩個品種組成的混合物的產量。ggplot2條形圖+疊加條形圖中的2個數據框的重疊圖

我的數據是在單獨的數據幀,例如:

> pure 
    Var  mean  sd 
1 Dinosor 855.5000 71.52783 
2 Rytmic 883.5667 214.19844 

> mixt 
    Var  mean  sd 
1 Dinosor 429.2333 124.1794 
2 Rytmic 378.8333 156.5239 

我的第一層是:

ggplot(data=pure, aes(x=Var, y=mean, fill=Var)) + 
     geom_bar(stat="identity") 

如何添加作爲第二層表示一個(單個)堆積條形圖任何想法混合物中的單一品種產量與來自數據框「混合物」的數據?

由於提前,

文森特

回答

1

我不能完全知道你是問什麼,但是這確實給你想要什麼?

yield <- rbind(transform(pure, mix = Var), transform(mixt, mix = 'Mixed')) 
ggplot(yield, aes(x=mix, y=mean, fill=Var)) + 
    geom_bar(stat="identity") 

通常使用ggplot時,這是最好的嘗試,並得到一切你繪製成一個數據幀,如果你能。我添加了另一列mix,它代表混合物或單個植物。然後您可以根據Var進行拆分,以便爲mixt數據提供堆疊條。


看到,因爲你有興趣使用單獨的圖層你可以做一些喜歡做它:

ggplot() + 
    geom_bar(data = transform(pure, mix = Var), aes(x=mix, y=mean, fill=Var), stat="identity") + 
    geom_bar(data = transform(mixt, mix = 'Mixed'), aes(x=mix, y=mean, fill=Var), stat="identity") 

這實際上是同樣的事情,但兩組數據。這很混亂,你只需要創建更多的問題,比如排序(這個圖可以給你Dinosor,Mixed和Rytmic的條碼......這可能不是你想要的)。

你可以改變這一點,所以它不是那麼重複:

ggplot() + 
    mapply(function(x, type) 
    geom_bar(data = transform(x, mix = type), 
     aes(x=mix, y=mean, fill=Var), stat="identity"), 
    list(pure, mixt), 
    list(pure$Var, 'Mixed')) 

但是這可能是相當神祕的期待。

+0

確實有這個技巧,這可能是最優雅的方法。感謝MadScone。儘管如此,爲了將來的使用,我會感謝解決方案,其中圖形由兩個不同的層組成。 – allardvinc

+0

我更新瞭解決方案以使用不同的圖層。雖然我不會推薦它! – MadScone

+0

解決方案2確實有點神祕,我會留在#1。由於這個例子有助於我理解如何玩ggplot語法,所以感謝。 – allardvinc