ggplot:从年份子集中添加新行

时间:2018-05-01 18:21:25

标签: r ggplot2

我有大约90年的每日数据,我想绘制长期均值,以及我调查期间(2014-2018)每年的单独行数。数据如下所示:

> head(dischg)
      date   ddmm year cfs      daymo
1 1-Jan-27 01-Jan 1927 715 2018-01-01
2 2-Jan-27 02-Jan 1927 697 2018-01-02
3 3-Jan-27 03-Jan 1927 715 2018-01-03
4 4-Jan-27 04-Jan 1927 796 2018-01-04
5 5-Jan-27 05-Jan 1927 825 2018-01-05
6 6-Jan-27 06-Jan 1927 865 2018-01-06

我已经能够很容易地绘制长期意味着:

p1 <- ggplot(dischg, aes(x=daymo, y=cfs)) +
  stat_summary(fun.data = "mean_cl_boot", geom = "smooth", colour = "blue")  

...但是我需要一些帮助来绘制年份的子集。我尝试使用“子集”

p2 <- p1 +
  ggplot (subset(dischg, year %in% c(2014:2018)), aes(x=daymo, y=cfs, linetype=year)) +
  geom_line() +
  scale_colour_brewer(palette="Set1") 

但我收到了这个错误:

  

错误:不知道如何在剧情中添加o

一次只添加一年会更聪明吗?当有五年的数据绘制时,这看起来有点麻烦。

2 个答案:

答案 0 :(得分:1)

感谢您提供示例数据,但遗憾的是,我无法使用您提供的示例数据运行ggplot代码,因此我将使用内置的R数据集。但概念是相同的。

问题是您正在尝试将ggplot添加到已经为ggplot类的对象中。将对象初始化为ggplot对象后,每次要添加图层时都不需要调用ggplot。例如,如果我尝试,我会遇到同样的错误:

p1 <- ggplot(mtcars, aes(x=hp,y=cyl)) + geom_point()
p2 <- p1 + ggplot(mtcars[mtcars$am == 1, ], aes(x = hp, y = cyl)) + geom_line()

正如我的评论中所提到的,如果您想要添加另一个包含单独数据的图层(在您的情况下为geom_line),您可以将数据直接放入geom_调用中。在你的情况下,你会做类似的事情:

p1 <- ggplot(mtcars, aes(x=hp,y=cyl)) + geom_point()
p2 <- p1 + geom_line(data = mtcars[mtcars$am == 1, ])

p2

enter image description here

答案 1 :(得分:0)

感谢@MikeH的反馈,我明白了:

p1 <- ggplot(dischg, aes(x=daymo, y=cfs)) +
  stat_summary(fun.data = "mean_cl_boot", geom = "smooth", colour = "blue") +
  geom_line(data=subset(dischg, year %in% c(2014:2018)), 
            aes(colour=year)) +
  scale_colour_brewer(palette="Set1")

(另外,我必须确保&#39; year&#39;是一个因素,而不是一个连续的变量。)