首页 > 解决方案 > R:叠加时间序列

问题描述

所以这个想法很简单,我想解决方案就在某个地方,但我就是找不到。我有 3 个年度时间序列,具有每日值,我希望能够在同一个图表中显示所有 3 年,其中 x 坐标是月份,y 坐标是每年的值。

标签: rplottime-series

解决方案


我会建议ggplot2您使用虚拟数据来考虑的方法。如果您想要 x 轴中的月份,您可以“破解”指定新年份的日期,以便您可以在使用scale_x_date(). 您还必须从日期中提取年份才能添加颜色。这里的代码:

library(ggplot2)
library(dplyr)
set.seed(123)
#Dummy data
df <- data.frame(Date=c(seq(as.Date('2017-01-01'),
                          as.Date('2017-12-31'),
                          length.out = 365),
                        seq(as.Date('2018-01-01'),
                            as.Date('2018-12-31'),
                            length.out = 365),
                        seq(as.Date('2019-01-01'),
                            as.Date('2019-12-31'),
                            length.out = 365)),
                 value=rnorm(1095,5,2))
#Format
#Create months and years
df %>% mutate(Year=format(Date,'%Y'),
              Date2=as.Date(paste0('2020-',format(Date,'%m-%d')))) %>%
  ggplot(aes(x=Date2,y=value,group=Year,color=Year))+
  geom_line()+
  scale_x_date(date_labels="%B",breaks = '1 month')

输出:

在此处输入图像描述

更新:也归功于伟大的@AllanCameron,这里使用cumsum()变量的更好的解决方案value

#Dummy data
df <- data.frame(Date=c(seq(as.Date('2017-01-01'),
                          as.Date('2017-12-31'),
                          length.out = 365),
                        seq(as.Date('2018-01-01'),
                            as.Date('2018-12-31'),
                            length.out = 365),
                        seq(as.Date('2019-01-01'),
                            as.Date('2019-12-31'),
                            length.out = 365)),
                 value = c(replicate(3, cumsum(rnorm(365)))))
#Format
#Create months and years
df %>% mutate(Year=format(Date,'%Y'),
              Date2=as.Date(paste0('2020-',format(Date,'%m-%d')))) %>%
  ggplot(aes(x=Date2,y=value,group=Year,color=Year))+
  geom_line()+
  scale_x_date(date_labels="%B",breaks = '1 month')

输出:

在此处输入图像描述


推荐阅读