0

我正在用 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”的数据混合在一起的单一品种产量?

提前致谢,

文森特

4

1 回答 1

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'))

但这可能看起来相当神秘。

于 2013-10-15T11:17:09.373 回答