r - R:叠加时间序列
问题描述
所以这个想法很简单,我想解决方案就在某个地方,但我就是找不到。我有 3 个年度时间序列,具有每日值,我希望能够在同一个图表中显示所有 3 年,其中 x 坐标是月份,y 坐标是每年的值。
解决方案
我会建议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')
输出:
推荐阅读
- yocto - Yocto 映像中的救援分区
- chirp - 如何在 keil 中编译基于 stm32f746g-discovery 的啁啾代码
- html - 如何将链接添加到 Facebook Like 按钮
- php - 重定向后会话变量丢失 - PHP 7.3
- arrays - 如何在reactjs中循环遍历数组
- javascript - 选择 selectedindex 时,使用下拉列表的选定项填充文本框
- python - python pandas groupby意外的空列
- php - 在 Woocommerce 单品页面中更改并保存产品价格
- google-cloud-platform - 尝试免费注册云身份会强制注册 G-Suite 高级版 14 天免费试用
- python - 想要从其中包含不同字符串的列中分离整数和浮点数