按多个字段分组图

group plots by multiple fields

我正在重新学习 ggplot,我得到了我认为是棘手的分组问题

SamplePeriod=c(rep(1:2, each=6, len=12))
Market=c(rep(LETTERS[1:2], each=3, len=12))
Day=c(rep(1:3,len=12))
Sales=c(5,6,7,8,9,7,5,6,7,5,6,7)
df <- data.frame(Sales=as.numeric(Sales),Day=as.numeric(Day),
             SamplePeriod=as.numeric(SamplePeriod),Market)

df
   Sales Day SamplePeriod Market
1      5   1            1      A
2      6   2            1      A
3      7   3            1      A
4      8   1            1      B
5      9   2            1      B
6      7   3            1      B
7      5   1            2      A
8      6   2            2      A
9      7   3            2      A
10     5   1            2      B
11     6   2            2      B
12     7   3            2      B

我想将销售额绘制成一天的函数。每个 SamplePeriod-Market 组合都应该是它自己的行(一行用于 1-A,一行用于 1-B、2-A、2-B)。最后,我想用不同的方式对市场进行着色,并将所有内容绘制在一个图上。

了解如何在每个市场各自的地块上分面也会很有用。

如果有人在我生成的 R 代码中也看到任何过分的地方,欢迎批评!

实现这一点的最简单方法可能是使用 facet_grid。以下代码将为您提供一个分面图,每个 SamplePeriod-Market 组合都有一个分面,每个 Market:

都有彩色线条
ggplot(df, aes(x = Day, y = Sales, color = Market)) +
  geom_line(size=2) +
  facet_grid(SamplePeriod ~ Market, labeller = label_both) +
  theme_bw()

这给出了以下情节:


如@drmariod 所述,您可以将其与 interaction 结合使用:

ggplot(df, aes(x=Day, y=Sales, color=interaction(Market,SamplePeriod))) +
  geom_line(size=2) +
  facet_grid(SamplePeriod ~ Market, labeller = label_both) +
  theme_bw()

这给出: