2017-10-07 44 views
0

我打算用ggplot2創建一個圖形。它應該顯示過去五年直到目前爲止的varibale時間序列的過去過程。我通過三種不同的預測方法爲下一年產生了三個不同的時間序列的點預測。 我正在考慮的圖表揭示了一種顏色(黑色)的過去值和三種不同顏色的點預測時間序列。ggplot2:一個圖形直到當前結束,然後是多個圖形

這是我的數據,我的做法:

ae<-ts(c(4.670958, 4.606170, 4.610158, 4.697749, 4.685828, 4.581902, 4.676560, 4.662495, 4.737951, 4.697749, 4.643429, 4.740575, 4.714921, 4.597138, 4.709530, 4.727388, 4.723842, 4.655863, 4.732684, 4.724729, 4.762174, 4.727388, 4.682131, 4.695011, 4.783316, 4.572647, 4.734443, 4.759607, 4.715817, 4.720283, 4.719391, 4.714025, 4.843399, 4.758749, 4.682131, 4.841033, 4.783316, 4.603168, 4.735321, 4.751865, 4.761319, 4.719391, 4.689511, 4.742320, 4.834693, 4.763028, 4.704110, 4.821893, 4.703204, 4.660605, 4.752728, 4.734443, 4.789989, 4.830711, 4.758749, 4.771532, 4.935193, 4.728272, 4.809742, 4.838660, 4.763028), start=c(2012,7), frequency=12) 
af<-ts(c(4.735572, 4.786397, 4.794226, 4.847278, 4.828640, 4.831721, 4.828364, 4.917734, 4.843730, 4.817140, 4.907995, 4.846953), start=c(2017,8), frequency=12) 
bf<-ts(c(4.731111, 4.802771, 4.789276, 4.855957, 4.787150, 4.839004, 4.815918, 4.910693, 4.831316, 4.804971, 4.894336, 4.837539), start=c(2017,8), frequency=12)  
cf<-ts(c(4.734454, 4.786685, 4.796952, 4.849983, 4.831067, 4.833924, 4.831631, 4.924311, 4.847889, 4.820325, 4.914030, 4.851841), start=c(2017,8), frequency=12) 

month2<-seq(as.Date('2012-7-1'),to=as.Date('2018-7-1'),by='month') 
al<-binder(window(ae, c(2012,7), c(2017,7)),af) 
bl<-binder(window(ae, c(2012,7), c(2017,7)),bf) 
cl<-binder(window(ae, c(2012,7), c(2017,7)),cf) 
df2<-data.frame(month2,al,bl,cl) 
meltdf <- reshape2::melt(df2,id="month2") 
ggplot(meltdf,aes(x=month2,y=value,colour=variable,group=variable)) + geom_line() 

,因爲過去的值有顏色的最後一點預測一樣,我不喜歡這種方式。什麼是非常有意義的,因爲這就是代碼所說的。有什麼方法可以讓它變得更好嗎?這是它看起來像現在:

1

非常感謝。 朱莉婭

+0

您可以添加所需的庫我無法重現您的代碼。 – missuse

回答

0

如果我是你,我會簡單地將觀測數據和預測數據作爲兩個獨立的數據體,每個數據體在不同的時間範圍內。然後你最終得到兩個data.frame s,一個用於觀測,一個用於預測。這將是這個樣子:

library(ggplot2) 

# OP's data 
ae <- ts(c(4.670958, 4.606170, 4.610158, 4.697749, 4.685828, 4.581902, 
      4.676560, 4.662495, 4.737951, 4.697749, 4.643429, 4.740575, 
      4.714921, 4.597138, 4.709530, 4.727388, 4.723842, 4.655863, 
      4.732684, 4.724729, 4.762174, 4.727388, 4.682131, 4.695011, 
      4.783316, 4.572647, 4.734443, 4.759607, 4.715817, 4.720283, 
      4.719391, 4.714025, 4.843399, 4.758749, 4.682131, 4.841033, 
      4.783316, 4.603168, 4.735321, 4.751865, 4.761319, 4.719391, 
      4.689511, 4.742320, 4.834693, 4.763028, 4.704110, 4.821893, 
      4.703204, 4.660605, 4.752728, 4.734443, 4.789989, 4.830711, 
      4.758749, 4.771532, 4.935193, 4.728272, 4.809742, 4.838660, 
      4.763028), 
     start=c(2012,7), frequency=12) 

af <- ts(c(4.735572, 4.786397, 4.794226, 4.847278, 4.828640, 4.831721, 
      4.828364, 4.917734, 4.843730, 4.817140, 4.907995, 4.846953), 
     start=c(2017,8), frequency=12) 

bf <- ts(c(4.731111, 4.802771, 4.789276, 4.855957, 4.787150, 4.839004, 
      4.815918, 4.910693, 4.831316, 4.804971, 4.894336, 4.837539), 
     start=c(2017,8), frequency=12)  

cf <- ts(c(4.734454, 4.786685, 4.796952, 4.849983, 4.831067, 4.833924, 
      4.831631, 4.924311, 4.847889, 4.820325, 4.914030, 4.851841), 
     start=c(2017,8), frequency=12) 

# Create separate month series, one for observed, one for forecasts 
month1 <- seq(as.Date('2012-7-1'), to=as.Date('2017-7-1'), by='month') 
month2 <- seq(as.Date('2017-8-1'), to=as.Date('2018-7-1'), by='month') 

# data.frame for observed data 
df1 <- data.frame(month=month1, dat=as.vector(ae)) 

# data.frame for forecast data with a label column to distinguish which 
# forecast it is 
df2 <- data.frame(month=month2, dat=as.vector(af), lab='a') 
df3 <- data.frame(month=month2, dat=as.vector(bf), lab='b') 
df4 <- data.frame(month=month2, dat=as.vector(cf), lab='c') 
df_forcast <- rbind(df2, df3, df4) 

# The plot then plots the data with two line geometries 
ggplot(df1, aes(x=month, y=dat)) + 
    geom_line() + # this plots the observed data 
    geom_line(data=df_forcast, aes(col=lab)) # this plots the forecasts 

生成的圖形看起來就像這樣:

time series

正如你在你的問題指出,需要在實際的數據集的東西你繪製以表明不同的數據點對應於不同的事物。當然,還有其他方法可以實現這一目標,但這種方法爲您提供了很大的靈活性,使您可以直觀地看到最終產品。 (注意:觀測數據與預測之間存在差距,這是因爲觀測數據在預測開始之前就已經結束了,如果你想要連接這些線,你可以簡單地複製觀測到的最後一個數據點數據作爲每個預測的第一個數據點,這是我爲你準備的練習。)

相關問題