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

R ggplot:从年份子集中添加新行,r,ggplot2,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

我有大约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")  

p1感谢您提供样本数据,但遗憾的是,我无法使用您提供的样本数据运行
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()

多亏了@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")

p1您无法将
ggplot
添加到
ggplot
对象中。尝试删除第二个
ggplot
调用并执行以下操作:
geom_线(子集(dischg,年份%in%c(2014:2018)),aes(线型=年份))
。我还为
x
y
删除了重复的
aes()
,因为它们将被继承。不幸的是,我无法用数据创建绘图,因为数据太少observations@MikeH. 考虑把这个作为答案。@ MikeH。谢谢我试过这个:
p2@RomanLuštrik好电话。把我的评论再解释一下作为回答
p1 <- ggplot(mtcars, aes(x=hp,y=cyl)) + geom_point()
p2 <- p1 + geom_line(data = mtcars[mtcars$am == 1, ])

p2
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")