【问题标题】:Overplotting from 2 data frames in ggplot2 bar plot + stacked bar从 ggplot2 条形图 + 堆积条形图中的 2 个数据帧过度绘制
【发布时间】:2013-10-15 09:55:29
【问题描述】:

我在用 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”的数据混合在一起的单个品种产量有什么想法吗?

提前致谢,

文森特

【问题讨论】:

    标签: r ggplot2


    【解决方案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'))
    

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

    【讨论】:

    • 这确实可以解决问题,这可能是最优雅的方式。谢谢疯狂烤饼。不过,对于未来的使用,我会很感激图表由两个不同的层组成的解决方案。
    • 我更新了解决方案以使用不同的层。不过我不会真的推荐它!
    • 解决方案 2 确实有点神秘,我将继续使用 #1。无论如何,谢谢,因为这个例子可以帮助我理解如何使用 ggplot 语法。
    猜你喜欢
    • 2019-11-28
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2021-12-27
    • 2021-10-16
    相关资源
    最近更新 更多