r - 当我加载 ggfortify 时,自动绘图函数的行为有所不同

标签 r ggplot2 forecasting ggfortify

我想绘制各种预测模型的图表。

当我在加载 ggplot2 后使用 autoplot 时,绘图显示如下:

autoplot(m_hw1_ff)

enter image description here

我还想添加训练和测试数据的拟合线。为此,我使用以下代码:

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包。

forecast v7 & ggplot2 graphics adding fitted line to autoplot

此后代码工作正常,训练和测试数据的拟合线绘制完美。然而,之前为蓝色的阴影区域(Lo 80、Hi 80、Lo 95 和 Hi 95 为深色和浅色)已完全变成灰色,如下图所示:

enter image description here

我希望阴影区域显示为第一张图中的样子。

最佳答案

您的代码存在几个问题。

第一个图是使用绘制的

forecast:::autoplot.forecast

autplot方法forecast包中的对象 forecast

当您加载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 object 是一个数据框,不是 ggplot 喜欢的长格式。也不适合转换为长格式,但它是易于管理的:

未转换为长格式的示例(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"))

enter image description here

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)

enter image description here

关于r - 当我加载 ggfortify 时,自动绘图函数的行为有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49994580/

相关文章:

r - 过滤 data.table 为 !is.na()

r - GREP : Find the locations where 2 words co-exist in a list of strings

R 在设置宽度和高度的 PDF 中缩放绘图元素

python - 使用 auto_arima(SARIMAX) 和傅立叶项预测具有多个季节性的时间序列

r - 在HTS R中创建分层数据结构,节点

r - R 中两个范围的重叠量 [DescTools?]

r - 以编程方式将值发送到过滤器的 tidyeval 方法

r - facet_wrap(ggplot2)中的多个标题

r - 如何在 Shiny 的 r 中并排放置多个图?

r - 避免在 R 中的 for 循环中使用 "optimization failure"