2013-10-15 145 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