周数据的R时间序列绘图

ffx8fchx  于 2022-12-06  发布在  其他
关注(0)|答案(2)|浏览(132)

我有从2015年第2周至2016年第9周的每周数据,在拟合和绘制预测后,X轴没有意义。我如何以月/周#的形式共享X轴值。谢谢

TS1<-ts(DUMMYDATA,frequency =52,start = c(2015,02),end = c(2016,09))

我尝试创建自己的x轴,但无法在时间分量方面正确反映它

iqjalb3h

iqjalb3h1#

首先我生成了一些随机的可重复数据。你可以直接用as.Datets中生成日期。然后你需要将时间序列转换为日期格式。要显示带有月/周日期的轴,你可以用scale_x_datedate_labels来表示周和月。下面是一个可重复的例子:

library(ggplot2)
# Generate random reproducible data
set.seed(1)
DUMMYDATA <- cumsum(rnorm(10000))
TS1<-ts(DUMMYDATA, frequency = 52, start = as.Date('2015-02-01'), end = as.Date('2016-09-01'))

# Convert to dataframe
data = data.frame(y=as.matrix(TS1), date=time(TS1))

# convert date to date format
data$date <- as.Date(as.numeric(time(data$date)), origin = "1970-01-01")

ggplot(data, aes(x = date, y = y)) +
  geom_line() +
  scale_x_date(date_labels = "%b-%W", 
               date_breaks = '1 week') +
  guides(x = guide_axis(angle = 90)) +
  theme_bw()

创建于2022年11月27日,使用reprex v2.0.2
如果不想显示每周,可以将date_breaks更改为月份,如下所示:

library(ggplot2)
ggplot(data, aes(x = date, y = y)) +
  geom_line() +
  scale_x_date(date_labels = "%b-%W", 
               date_breaks = '1 month') +
  guides(x = guide_axis(angle = 90)) +
  theme_bw()

创建于2022年11月27日,使用reprex v2.0.2

jtoj6r0c

jtoj6r0c2#

一种方法是使用tsibble对象而不是ts对象。下面是一个示例:

library(ggplot2)
library(tsibble)
library(lubridate)
library(feasts)

set.seed(1)
df <- tsibble(
  Week = yearweek(seq(as.Date("2015-01-01"), length=300, by="7 days")),
  TS1 = cumsum(rnorm(300))
)
#> Using `Week` as index variable.
df |> autoplot(TS1) +
  scale_x_yearweek(date_breaks = '1 year')

创建于2022年11月27日,使用reprex v2.0.2
您似乎正在使用forecast程序包根据ts对象创建预测。fable程序包中提供了等效功能,用于根据tsibble对象创建预测。有关许多示例(包括使用每周数据),请参阅my book

相关问题