使用预测对象的自动绘图功能自动绘图
Automatically plots with autoplot function from forecasting object
我正在结合 fpp2 包中的数据集和 forecast 包中的预测功能进行造林。此预测的输出是带有 SNAIVE_MODELS_ALL 的对象列表。该对象包含两个系列的数据,第一个是电力,第二个是水泥。
你可以看到下面的代码:
# CODE
library(fpp2)
library(dplyr)
library(forecast)
library(gridExtra)
library(ggplot2)
#INPUT DATA
mydata_qauselec <- qauselec
mydata_qcement <- window(qcement, start = 1956, end = c(2010, 2))
# Мerging data
mydata <- cbind(mydata_qauselec, mydata_qcement)
colnames(mydata) <- c("Electricity", "Cement")
# Test Extract Name
mydata1 <- data.frame(mydata)
COL_NAMES <- names(mydata1)
rm(mydata_qauselec, mydata_qcement)
# FORCASTING HORIZON
forecast_horizon <- 12
#FORCASTING
BuildForecast <- function(Z, hrz = forecast_horizon) {
timeseries <- msts(Z, start = 1956, seasonal.periods = 4)
forecast <- snaive(timeseries, biasadj = TRUE, h = hrz)
}
frc_list <- lapply(X = mydata1, BuildForecast)
#FINAL FORCASTING
SNAIVE_MODELS_ALL<-lapply(frc_list, forecast)
所以我的目的是将这个对象 SNAIVE_MODELS_ALL 放入自动绘图函数中,以获得如下图所示的两个图。
使用下面的代码,我将两个图分开绘制,但我的主要目的是使用函数 autoplot 和一些函数(如 apply 或类似的东西)来完成此操作,它可以自动绘制这两个图表,如 pic above.This 只是真实示例中的小示例我可能会有 5 或 10 个图表。
#PLOT 1
P_PLOT1<-autoplot(SNAIVE_Electricity,main = "Snaive Electricity forecast",xlab = "Year", ylab = "in billion kWh")+
autolayer(SNAIVE_Electricity,series="Data")+
autolayer(SNAIVE_Electricity$fitted,series="Forecasts")
# PLOT 2
P_PLOT2<-autoplot(SNAIVE_Cement,main = "Snaive Cement forecast",xlab = "Year", ylab = "in millions of tonnes")+
autolayer(SNAIVE_Cement,series="Data")+
autolayer(SNAIVE_Cement$fitted,series="Forecasts")
#UNION PLOTS (PLOT 1 AND PLOT 2)
SNAIVE_PLOT_ALL<-grid.arrange(P_PLOT1,P_PLOT2)
有人可以帮我处理这段代码吗?
如果我以正确的方式理解,这个问题的难点之一是每个图都应该有一个特定的标题和 y 标签。一种可能的解决方案是将绘图标题和 y-lables 设置为函数参数:
PlotForecast <- function(df_pl, main_pl, ylab_plt){
autoplot(df_pl,
main = main_pl,
xlab = "Year", ylab = ylab_plt)+
autolayer(df_pl,series="Data")+
autolayer(df_pl$fitted,series="Forecasts")
}
准备要与 PlotForecast()
一起使用的绘图标签列表:
main_lst <- list("Snaive Electricity forecast", "Snaive Cement forecast")
ylab_lst <- list("in billion kWh", "in millions of tonnes")
使用基本 Map()
函数构建 plot-objects 的列表:
PL_list <- Map(PlotForecast, df_pl = SNAIVE_MODELS_ALL, main_pl = main_lst,
ylab_plt= ylab_lst)
然后我们所要做的就是用剧情列表调用grid.arrange()
:
do.call(grid.arrange, PL_list)
请注意,main_lst
和 ylab_lst
是出于演示目的手动创建的,但如果您使用大量图表,这不是最佳方法。理想情况下,应使用原始 SNAIVE_PLOT_ALL
列表自动生成标签。
我正在结合 fpp2 包中的数据集和 forecast 包中的预测功能进行造林。此预测的输出是带有 SNAIVE_MODELS_ALL 的对象列表。该对象包含两个系列的数据,第一个是电力,第二个是水泥。 你可以看到下面的代码:
# CODE
library(fpp2)
library(dplyr)
library(forecast)
library(gridExtra)
library(ggplot2)
#INPUT DATA
mydata_qauselec <- qauselec
mydata_qcement <- window(qcement, start = 1956, end = c(2010, 2))
# Мerging data
mydata <- cbind(mydata_qauselec, mydata_qcement)
colnames(mydata) <- c("Electricity", "Cement")
# Test Extract Name
mydata1 <- data.frame(mydata)
COL_NAMES <- names(mydata1)
rm(mydata_qauselec, mydata_qcement)
# FORCASTING HORIZON
forecast_horizon <- 12
#FORCASTING
BuildForecast <- function(Z, hrz = forecast_horizon) {
timeseries <- msts(Z, start = 1956, seasonal.periods = 4)
forecast <- snaive(timeseries, biasadj = TRUE, h = hrz)
}
frc_list <- lapply(X = mydata1, BuildForecast)
#FINAL FORCASTING
SNAIVE_MODELS_ALL<-lapply(frc_list, forecast)
所以我的目的是将这个对象 SNAIVE_MODELS_ALL 放入自动绘图函数中,以获得如下图所示的两个图。
使用下面的代码,我将两个图分开绘制,但我的主要目的是使用函数 autoplot 和一些函数(如 apply 或类似的东西)来完成此操作,它可以自动绘制这两个图表,如 pic above.This 只是真实示例中的小示例我可能会有 5 或 10 个图表。
#PLOT 1
P_PLOT1<-autoplot(SNAIVE_Electricity,main = "Snaive Electricity forecast",xlab = "Year", ylab = "in billion kWh")+
autolayer(SNAIVE_Electricity,series="Data")+
autolayer(SNAIVE_Electricity$fitted,series="Forecasts")
# PLOT 2
P_PLOT2<-autoplot(SNAIVE_Cement,main = "Snaive Cement forecast",xlab = "Year", ylab = "in millions of tonnes")+
autolayer(SNAIVE_Cement,series="Data")+
autolayer(SNAIVE_Cement$fitted,series="Forecasts")
#UNION PLOTS (PLOT 1 AND PLOT 2)
SNAIVE_PLOT_ALL<-grid.arrange(P_PLOT1,P_PLOT2)
有人可以帮我处理这段代码吗?
如果我以正确的方式理解,这个问题的难点之一是每个图都应该有一个特定的标题和 y 标签。一种可能的解决方案是将绘图标题和 y-lables 设置为函数参数:
PlotForecast <- function(df_pl, main_pl, ylab_plt){
autoplot(df_pl,
main = main_pl,
xlab = "Year", ylab = ylab_plt)+
autolayer(df_pl,series="Data")+
autolayer(df_pl$fitted,series="Forecasts")
}
准备要与 PlotForecast()
一起使用的绘图标签列表:
main_lst <- list("Snaive Electricity forecast", "Snaive Cement forecast")
ylab_lst <- list("in billion kWh", "in millions of tonnes")
使用基本 Map()
函数构建 plot-objects 的列表:
PL_list <- Map(PlotForecast, df_pl = SNAIVE_MODELS_ALL, main_pl = main_lst,
ylab_plt= ylab_lst)
然后我们所要做的就是用剧情列表调用grid.arrange()
:
do.call(grid.arrange, PL_list)
请注意,main_lst
和 ylab_lst
是出于演示目的手动创建的,但如果您使用大量图表,这不是最佳方法。理想情况下,应使用原始 SNAIVE_PLOT_ALL
列表自动生成标签。