在ggplot2条形图+堆积条中从2个数据帧中过度绘制

时间:2013-10-15 09:55:30

标签: r ggplot2

我正在努力与ggplot2在同一个图上绘图 1)表示两种植物品种产量的条形图 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")

关于如何在数据框“mixt”的数据混合中添加一个(单个)堆积条代表单一品种产量的任何想法?

提前致谢,

文森特

1 个答案:

答案 0 :(得分: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'))

但那可能看起来很神秘。