如何在ggplot2中按两列分组(有例子)

697 阅读2分钟

在ggplot2中创建绘图时,你可以使用以下基本语法来按两列分组:

ggplot(df, aes(x=var1, y=var2, color=var3, shape=var4,
       group=interaction(var3, var4))) + 
  geom_point() +
  geom_line()

这段特殊的代码产生了一个线段图,其中的点是按数据框架中的var3var4列分组的。

下面的例子展示了如何在实践中使用这种语法。

例子:在ggplot2中按两列分组

假设我们在R中拥有以下数据框,它显示了两个不同的商店在不同的星期内进行两种不同促销活动时的总销售额:

#create data frame
df <- data.frame(store=rep(c('A', 'B'), each=8),
                 promo=rep(c('Promo 1', 'Promo 2'), each=4, times=2),
                 week=rep(c(1:4), times=4),
                 sales=c(1, 2, 6, 7, 2, 3, 5, 6, 3, 4, 7, 8, 3, 5, 8, 9))

#view data frame
df

   store   promo week sales
1      A Promo 1    1     1
2      A Promo 1    2     2
3      A Promo 1    3     6
4      A Promo 1    4     7
5      A Promo 2    1     2
6      A Promo 2    2     3
7      A Promo 2    3     5
8      A Promo 2    4     6
9      B Promo 1    1     3
10     B Promo 1    2     4
11     B Promo 1    3     7
12     B Promo 1    4     8
13     B Promo 2    1     3
14     B Promo 2    2     5
15     B Promo 2    3     8
16     B Promo 2    4     9

我们可以用下面的代码在ggplot2中创建一个折线图,其中的数据值按商店促销栏分组:

library(ggplot2)

#create line plot with values grouped by store and promo
ggplot(df, aes(x=week, y=sales, color=store, shape=promo,
               group=interaction(store, promo))) + 
  geom_point(size=3) +
  geom_line()

ggplot group by two columns

结果是一个折线图,其中每条线代表商店促销活动的每个组合的销售值。

特别是,这四条线代表了以下组合的销售值:

  • 商店A的促销活动1
  • 商店A的促销活动2
  • 商店B的促销活动1
  • 商店B的促销活动1

图中的两个图例说明了哪条线代表哪种组合。