【问题标题】:Line Plot subset data with ggplot2 (facet)使用 ggplot2 (facet) 绘制子集数据的线图
【发布时间】:2017-12-11 16:42:44
【问题描述】:

我有考试成绩数据。我想要在不同年份(3 行)的阅读中获得 3 种不同测试分数的 ggline 图。我希望在相同年份(4 行)的写作中叠加超过 4 个不同的测试分数。将所有 7 个都放在一个情节上令人困惑。 我可以对数据进行子集化,以便显示读取或写入,但我似乎无法将它们整齐地堆叠在一起。

年份、ID、考试、分数、类型

2010, 1, R1, 72.75, R
2010, 1, R2, 68.25, R
2010, 1, R3, 83.75, R
2010, 1, W1, 89.25, W
2010, 1, W2, 58.25, W
2010, 1, W3, 64.25, W
2010, 1, W4, 90.25, W
2011, 1, R1, 52.25, R
2011, 1, R2, 90.25, R
2011, 1, R3, 73.25, R
2011, 1, W1, 79.5, W
2011, 1, W2, 89.25, W
2011, 1, W3, 85.25, W
2011, 1, W4, 78.25, W

我有这段代码可以生成一张图,只需阅读:

ggplot(subset(df,skill %in% c("R1", "R2", "R3"))) + 
  geom_line(aes(year, score, group=skill, colour=skill)) 

我已经尝试这样做以获得两者,但这显然是不正确的:

p1 <- subset(df,skill %in% c("R1", "R2", "R3"))
p2 <- subset(df,skill %in% c("W1", "W2", "W3", "W4"))
ggplot()+ geom_line(data=p1, aes(year, score, group=skill, colour=skill)) +
  geom_line(data=p2, aes(year, score, group=skill, colour=skill)) +
  facet_grid(~type)

任何帮助将不胜感激

【问题讨论】:

  • 您的示例数据有一个列test,但您的代码引用的列skill 不在您的示例数据中。请使用dput(df)) 并将输出复制到您的问题中,以便人们更轻松地处理您拥有的数据。见stackoverflow.com/questions/5963269/…
  • 尝试更改您的绘图代码以在单个 geom_line 层加上各个方面使用整个数据集 ("df"),而不是每个子集有一个单独的 geom_line 层。

标签: r ggplot2 subset facet


【解决方案1】:

如果您要基于类型进行分面,则无需将数据子集为 p1 和 p2。

ggplot(df) + 
  geom_line(aes(year, score, group = skill, colour = skill)) +
  facet_wrap(~type)

替代方案,添加nrow =2 以堆叠图并添加scales = "free" 以赋予它们独立的轴。

ggplot(df) + 
  geom_line(aes(year, score, group = skill, colour = skill)) +
  facet_wrap(~type, nrow = 2, scales = "free")

但是,你的评论说

这确实有效,但它将图形并排放置而不是垂直堆叠。有没有办法将它们一个一个堆叠起来,也许将图例分开,这样读写是分开的?

为了解决单独的图例,我将制作每个图,然后使用包 cowplot 进行组合。使用gridExtra 的其他方法可以做到这一点,但cowplot 使这变得简单。

p1 <- ggplot(subset(df,skill %in% c("R1", "R2", "R3"))) + 
  geom_line(aes(year, score, group = skill, colour = skill)) +
  facet_wrap(~type, scales = "free")

p2 <- ggplot(subset(df,type %in% c("W"))) + 
  geom_line(aes(year, score, group = skill, colour = skill)) +
  facet_wrap(~type, scales = "free")

cowplot::plot_grid(p1, p2, nrow = 2)

【讨论】:

  • 感谢 Eric 的回复。这确实有效,但它将图形并排放置而不是垂直堆叠。有没有办法将它们一个一个堆叠起来,也许将图例分开,这样读写是分开的?
  • 更新的答案,我认为这解决了您的评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多