如何将两个图形合并为一个图?

时间:2019-07-12 16:51:58

标签: r ggplot2

我有以下数据集:

a<-data.frame(time=c("before","after","before","after"),
                  company=c(1,1,2,2),
                  value=c(3.751522,4.776224,3.838707,2.644144 ))

我想创建一个绘图,其中条形图在左侧Company 1上描绘“ before”和“ after”值。同时,公司2的“之前”和“之后”值位于图的右侧。 因此,在y轴上应为变量“值”,但在x轴上应为“前”和“后”两次,因为公司1在左侧,公司2在右侧。

我尝试了以下代码:

ggplot(data=a, aes(time,company,group=interaction(company, time)))+
  geom_col(aes(y=value))

不幸的是,它只会在忽略公司名称的“之前”和“之后”时间段内产生变量“值”的总和。

将其作为两个单独的图进行处理,然后使用grid.arrange()会比最初在一个图形中简单地绘制它占用更多的空间。

2 个答案:

答案 0 :(得分:1)

ArgumentError: you can't define an already defined column 'author_id'. 是公司与时间之间的互动,x是价值。我认为您无需为此在y中添加任何参数。

geom_col()

enter image description here

甚至更好:

ggplot(data=a, aes(x=interaction(time, company),y=value,fill=interaction(time, company)))+
  geom_col()

enter image description here

答案 1 :(得分:1)

当我想像这样拆分图时,我使用facet_grid参数。

library(tidyverse)

a<-data.frame(time=c("before","after","before","after"),
              company=c(1,1,2,2),
              value=c(3.751522,4.776224,3.838707,2.644144 ))

ggplot(data=a, 
       aes(x = time %>%
                 # set time as factor to set order of before, after
                 factor(levels = c("before", "after")),
           y = value))+
  geom_col()+
  # split graph by company
  facet_grid(cols = vars(company))

resulting graph image

enter image description here