如何将 2 个图(ggplot)合并为一个图?

Posted

技术标签:

【中文标题】如何将 2 个图(ggplot)合并为一个图?【英文标题】:How to combine 2 plots (ggplot) into one plot? 【发布时间】:2014-02-07 03:26:58 【问题描述】:

通过使用 R,是否可以将 2 个 ggplot 放在一起(即在同一个图上)?我希望显示来自 2 个不同数据帧的趋势,而不是将它们放在一个旁边,我想将它们整合到一个图中,并且只更改其中一个的颜色(黑点)。

更具体地说,我有以下 2 个视觉效果:

ggplot(visual1, aes(ISSUE_DATE,COUNTED)) + geom_point() + geom_smooth(fill="blue", colour="darkblue", size=1)

ggplot(visual2, aes(ISSUE_DATE,COUNTED)) + geom_point() + geom_smooth(fill="red", colour="red", size=1)

它们看起来像这样(两者都有黑点,我需要将其中一个更改为不同的东西):

【问题讨论】:

【参考方案1】:

虚拟数据(您应该为我们提供)

visual1 = data.frame(ISSUE_DATE=runif(100,2006,2008),COUNTED=runif(100,0,50))
visual2 = data.frame(ISSUE_DATE=runif(100,2006,2008),COUNTED=runif(100,0,50))

结合:

visuals = rbind(visual1,visual2)
visuals$vis=c(rep("visual1",100),rep("visual2",100)) # 100 points of each flavour

现在做:

 ggplot(visuals, aes(ISSUE_DATE,COUNTED,group=vis,col=vis)) + 
   geom_point() + geom_smooth()

并根据口味调整颜色等。

【讨论】:

【参考方案2】:

使用您当前的数据设置创建一个组合图看起来像这样

p <- ggplot() +
      # blue plot
      geom_point(data=visual1, aes(x=ISSUE_DATE, y=COUNTED)) + 
      geom_smooth(data=visual1, aes(x=ISSUE_DATE, y=COUNTED), fill="blue",
        colour="darkblue", size=1) +
      # red plot
      geom_point(data=visual2, aes(x=ISSUE_DATE, y=COUNTED)) + 
      geom_smooth(data=visual2, aes(x=ISSUE_DATE, y=COUNTED), fill="red",
        colour="red", size=1)

但是,如果您可以在绘图之前组合数据集,那么 ggplot 将 自动给你一个图例,总的来说代码看起来更干净一些

visual1$group <- 1
visual2$group <- 2

visual12 <- rbind(visual1, visual2)

p <- ggplot(visual12, aes(x=ISSUE_DATE, y=COUNTED, group=group, col=group, fill=group)) +
      geom_point() +
      geom_smooth(size=1)

【讨论】:

【参考方案3】:

只需将它们组合起来。我认为这应该可行,但未经测试:

p <- ggplot(visual1, aes(ISSUE_DATE,COUNTED)) + geom_point() + 
     geom_smooth(fill="blue", colour="darkblue", size=1)

p <- p + geom_point(data=visual2, aes(ISSUE_DATE,COUNTED)) + 
     geom_smooth(data=visual2, fill="red", colour="red", size=1)

print(p)

【讨论】:

我认为你不需要为第二个数据集指定的美学(因为它们都有相同的列名),你可以指定data=visual2 谢谢@JLLagrange - 你是对的。我只是快速复制和修改海报的代码 - 我根本没有尝试清理它。

以上是关于如何将 2 个图(ggplot)合并为一个图?的主要内容,如果未能解决你的问题,请参考以下文章

Arcgis一个图层拆分成若干个图层

使用 ggplot 循环

如何在ggarrange ggpubr ggplot中调整边距(轴元素消失)R

如何合并、拆分和查询第 k 个排序列表?

如何显示使用 patchwork 包制作的 ggplots 数组的标签?

重复测量图:叠加平均轨迹和误差线 (ggplot2)