当我加载 ggfortify 时,Autoplot 函数的行为有所不同
Autoplot function behaves differently when I load ggfortify
我想为各种预测模型绘制图表。
当我加载 ggplot2 后使用自动绘图时,绘图显示如下:
autoplot(m_hw1_ff)
我还想为训练和测试数据添加拟合线。为此,我使用以下代码:
autoplot(m_hw1_ff) +
geom_line(aes(y=m_reg1_ff$fitted), col = "green") +
geom_line(data=test_ts_data, aes(y=test_ts_data), col = "red")
当上面的代码是运行刚加载ggplot2后,报错如下:
Error in order(data$PANEL, data$group, data$x) :
argument 3 is not a vector
参考了这个问题的评论和回答后,我也加载了ggfortify包。
此后代码运行良好,并且完美绘制了训练和测试数据的拟合线。然而,之前为蓝色的阴影区域(Lo 80、Hi 80、Lo 95 和 Hi 95 的深色和浅色)已经完全变成灰色,如下图所示:
我希望阴影区域显示在第一张图中的样子。
您的代码有几个问题。
第一个图是使用
绘制的
forecast:::autoplot.forecast
包 forecast
中 forecast
个对象的 autplot
方法
当您加载 ggforitify
时,它被屏蔽:
ggfortify:::autoplot.forecast
这就是情节表现不同的原因。
我的建议是将预测对象转换为数据框并使用 ggplot 绘图。这将允许更高级别的定制。示例:
library(forecast)
library(ggfortify)
d.arima <- auto.arima(AirPassengers)
d.forecast <- forecast(d.arima, h = 50)
创建用于绘图的数据框:
for_plot <- ggfortify:::fortify.forecast(d.forecast,
ts.connect = TRUE)
你也可以这样做:
for_plot <- fortify(d.forecast,
ts.connect = TRUE)
加载后 ggfortify
。
我就这样写了,你就明白这叫什么了。
for_plot
对象是一个数据框,不是 ggplot 喜欢的长格式。也不是适合转换为 long 的格式,但它是易于管理的:
不转换为长格式的示例(ggplot 异端方式):
ggplot(data = for_plot) +
geom_line(aes(x= Index, y = Data, color = "raw")) +
geom_line(aes(x= Index, y = Fitted, color = "fitted")) +
geom_line(aes(x= Index, y = `Point Forecast`, color = "point forecast")) +
geom_ribbon(aes(x= Index, ymin = `Lo 80`, ymax = `Hi 80`, fill = "80"), alpha = 0.2) +
geom_ribbon(aes(x= Index, ymin = `Lo 95`, ymax = `Hi 95`, fill = "95"), alpha = 0.2) +
scale_fill_manual("what", values = c("blue", "dodgerblue"))+
scale_color_manual("why", values = c("blue", "red", "green"))
ggplot 方法包括将数据分配到两个数据框,一个用于绘制色带,另一个用于绘制线条,将每个数据转换为长格式,然后进行绘制。像这样:
library(tidyverse)
for_plot_lines <- for_plot %>%
gather(key, value, 2:4) %>%
select(key, value, Index)
for_plot %>%
filter(!is.na(`Point Forecast`)) %>%
gather(Lo, ymin, c("Lo 80", "Lo 95")) %>%
gather(Hi, ymax, c("Hi 80", "Hi 95")) -> for_plot_ribbon
ggplot(data = for_plot_lines) +
geom_line(aes(x= Index, y = value, color = key)) +
geom_ribbon(data = for_plot_ribbon,
aes(x= Index, ymin = ymin, ymax = ymax, fill = Hi), alpha = 0.2)
我想为各种预测模型绘制图表。
当我加载 ggplot2 后使用自动绘图时,绘图显示如下:
autoplot(m_hw1_ff)
我还想为训练和测试数据添加拟合线。为此,我使用以下代码:
autoplot(m_hw1_ff) +
geom_line(aes(y=m_reg1_ff$fitted), col = "green") +
geom_line(data=test_ts_data, aes(y=test_ts_data), col = "red")
当上面的代码是运行刚加载ggplot2后,报错如下:
Error in order(data$PANEL, data$group, data$x) :
argument 3 is not a vector
参考了这个问题的评论和回答后,我也加载了ggfortify包。
此后代码运行良好,并且完美绘制了训练和测试数据的拟合线。然而,之前为蓝色的阴影区域(Lo 80、Hi 80、Lo 95 和 Hi 95 的深色和浅色)已经完全变成灰色,如下图所示:
我希望阴影区域显示在第一张图中的样子。
您的代码有几个问题。
第一个图是使用
绘制的forecast:::autoplot.forecast
包 forecast
forecast
个对象的 autplot
方法
当您加载 ggforitify
时,它被屏蔽:
ggfortify:::autoplot.forecast
这就是情节表现不同的原因。
我的建议是将预测对象转换为数据框并使用 ggplot 绘图。这将允许更高级别的定制。示例:
library(forecast)
library(ggfortify)
d.arima <- auto.arima(AirPassengers)
d.forecast <- forecast(d.arima, h = 50)
创建用于绘图的数据框:
for_plot <- ggfortify:::fortify.forecast(d.forecast,
ts.connect = TRUE)
你也可以这样做:
for_plot <- fortify(d.forecast,
ts.connect = TRUE)
加载后 ggfortify
。
我就这样写了,你就明白这叫什么了。
for_plot
对象是一个数据框,不是 ggplot 喜欢的长格式。也不是适合转换为 long 的格式,但它是易于管理的:
不转换为长格式的示例(ggplot 异端方式):
ggplot(data = for_plot) +
geom_line(aes(x= Index, y = Data, color = "raw")) +
geom_line(aes(x= Index, y = Fitted, color = "fitted")) +
geom_line(aes(x= Index, y = `Point Forecast`, color = "point forecast")) +
geom_ribbon(aes(x= Index, ymin = `Lo 80`, ymax = `Hi 80`, fill = "80"), alpha = 0.2) +
geom_ribbon(aes(x= Index, ymin = `Lo 95`, ymax = `Hi 95`, fill = "95"), alpha = 0.2) +
scale_fill_manual("what", values = c("blue", "dodgerblue"))+
scale_color_manual("why", values = c("blue", "red", "green"))
ggplot 方法包括将数据分配到两个数据框,一个用于绘制色带,另一个用于绘制线条,将每个数据转换为长格式,然后进行绘制。像这样:
library(tidyverse)
for_plot_lines <- for_plot %>%
gather(key, value, 2:4) %>%
select(key, value, Index)
for_plot %>%
filter(!is.na(`Point Forecast`)) %>%
gather(Lo, ymin, c("Lo 80", "Lo 95")) %>%
gather(Hi, ymax, c("Hi 80", "Hi 95")) -> for_plot_ribbon
ggplot(data = for_plot_lines) +
geom_line(aes(x= Index, y = value, color = key)) +
geom_ribbon(data = for_plot_ribbon,
aes(x= Index, ymin = ymin, ymax = ymax, fill = Hi), alpha = 0.2)