В вашем коде есть несколько проблем.
Первый график строится с использованием
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
- это фрейм данных, но не в длинном формате, который нравится 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"))
Способ 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)
person
missuse
schedule
24.04.2018