ggseasonplot для почасовых данных с еженедельным эквивалентом сезонности - PullRequest
1 голос
/ 11 мая 2019

У меня есть временной ряд с разрешением один час, который отображает еженедельную сезонность.Я ищу эквивалент функции ggseasonplot из пакета ggplot2, которая работает для еженедельной сезонности.

Я посмотрел в Интернете, но не нашел ни одной подобной функции, кроме seasonplot, которая такая же, как ggseasonplot, но менее модная.

data<-read.csv("series.csv") 
hours <- seq(ISOdatetime(2016,4,18,0,0,0), ISOdatetime(2016,5,22,23,0,0), by=(60*60))
time_series<- xts::xts(data[123118:123957,2],hours)
time_series168 <- ts(data,frequency = 168)

ggseasonplot(time_series168,continuous = TRUE)

R plot

Я бы хотел, чтобы на графике были недели вместо года.А на графике каждый час недели - это сезон, я бы хотел, чтобы «сезоны» были днями.

Пример моих данных:

Datetime            series
2016-04-18 00:00:00 4124
2016-04-18 01:00:00 3932
2016-04-18 02:00:00 3823
2016-04-18 03:00:00 3830
2016-04-18 04:00:00 3797
2016-04-18 05:00:00 3935

1 Ответ

0 голосов
/ 21 мая 2019

Я придумала решение, поэтому выкладываю его на тот случай, если кто-то ищет это:

plot(1:168,time_series168[1:168],type="l",xaxt = "n",col=rgb(0,0.2,1),xlab="Days of week",ylab="Time series",main="Evolution of time series over the weeks",lwd=1.5)

for(i in 1:4){
   color<-rgb(0.25*i,0.2,1-0.2*i)
   left<-168*i+1
   right<-168*(i+1)
   lines(1:168,time_series168[left:right],type="l",xaxt = "n", col=color, lwd=1.5)
} 

axis(1, at=c(24,48,72,96,120,144,168)-12, labels=c("Mon","Tue","Wed","Thu","Fri","Sat","Sun"))
legend("topright",bty="n",legend=c("into the past","into the future"), col=c(rgb(0,0.2,1), rgb(1,0.2,0.2)), lty=1,lwd=2)

Установив xaxt = "n", ось не помечена, тогда можно пометить их labels в axis.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...