我正在使用来自fpp2软件包的数据集和来自预测软件包的预测函数的组合进行森林预测。此预测的输出是带有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函数中,以便得到两个如下图所示的图。

在下面的代码中,我将两个图分开绘制,但我的主要目的是使用函数autoplot和一些类似的函数来实现这一点,这些函数可以自动绘制这两个图表,如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)那么有没有人能帮我写这个代码呢?
发布于 2019-08-28 22:21:57
如果我以正确的方式理解,这个问题的困难之一是每个绘图都应该有一个特定的标题和y标签。一种可能的解决方案是将绘图标题和y-lable设置为函数参数:
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()函数构建绘图对象列表:
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列表自动生成。
https://stackoverflow.com/questions/57693208
复制相似问题