2017-10-07 13 views
0

ggplot2でグラフを作成しようとしています。これは、過去5年間の現在の終わりまでの時系列の過去の経過を示すことになっています。私は、3つの異なる予測方法によって、3つの異なる時系列のポイント予測を次の年に生成しました。 私が考えているグラフは、過去の値を1つの色(黒)で示し、3つの時系列の予測をさまざまな色で示しています。ggplot2:1つのグラフから現在の最後まで、複数のグラフ

これは私のデータと私のアプローチです:

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

どうもありがとうございました。 Julia

+0

必要なライブラリを追加できますか?コードを再現できません。 – missuse

答えて

0

私があなただったら、観察されたデータと予測データを、それぞれ異なるタイムスパンの2つの別々のデータ本体として扱うだけです。次に、2つのdata.frameで終了します.1つは観測のためのものであり、もう1つは予測のものです。結果のグラフは次のようになります

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

、あなたがプロットしている実際のデータセット内の何かが必要異なるデータポイントが異なるものに対応していることを示します。もちろん、それを達成するための他の方法もありますが、このアプローチは、最終製品をどのように視覚化するかについて多くの柔軟性をもたらします。

(注:観測データが予測の前に終了するため、観測データと予測データにはギャップがあります)ラインを接続する場合は、観測データの最後のデータポイントを複製するだけですデータを各予測の最初のデータポイントとして使用します)。

関連する問題