Как построить Highcharter Arearange из матрицы

У меня есть матричный вывод из пакета Seasonal, в котором я отфильтровываю столбец «прогноз», оставляя только время (месяц год) и записи «lowerci» и «upperci». Это делается через: season13201101FL.forecast[,c('lowerci','upperci')]

Пример данных:

           lowerci  upperci
Oct 2017 2415.8826 3083.332
Nov 2017 2217.2670 3238.572
Dec 2017 1976.0041 3181.648
Jan 2018 2048.9771 3577.373
Feb 2018 2046.3051 3834.099

Это класса «мтс». Я использую библиотеку highcharter для построения своих значений. Однако, похоже, что он не использует столбцы "lowerci" и "upperci", хотя я использую series.keys для сопоставления:

hc <- highchart(type = "stock") %>% 
  hc_add_series(season13201101FL, id = "Original", name = "Original-FL") %>% 
  hc_add_series(season13201101FL.seasonalData, id = "Seasonally Adjusted-FL", name = "Seasonally Adjusted") %>% 
  hc_add_series(season13201101FL.forecast[,c('forecast')], id = "Forecast-FL") %>% 
  hc_add_series(season13201101FL.forecast[,c('lowerci','upperci')], id = "ForecastRange-FL", keys = c('x', 'low', 'high'), type = "arearange")
hc

Результирующая диаграмма содержит исходный, сезонно скорректированный и прогнозируемый ряды, но отображается диапазон прогноза без «линии», соединяющей точки, и только одна фактическая точка данных для каждой записи времени. Как получить highcharter, чтобы увидеть, что это серия arearange? Образец выпуска

Для воспроизведения используйте следующий файл CSV для импорта как theCSV:

date    count
2008.0027   45778
2008.0874   50460
2008.1667   62162
2008.2514   55999
2008.3333   51571
2008.418    45044
2008.5  46357
2008.5847   48498
2008.6694   45472
2008.7514   47161
2008.8361   41907
2008.918    39131
2009.0027   33810
2009.0877   34469

Тогда код такой:

library(shiny)
library(highcharter)
library(dplyr)
library(tidyr)
library(seasonal)

seasonData <- ts(theCSV[,-1], frequency = 12, start = c(2008,1));
seasonData.seas <- seas(seasonData);
seasonData.seasonalData <- final(seasonData.seas);
seasonData.forecast <- series(seasonData.seas, "forecast.forecasts");
seasonData.seasComp <- series(seasonData.seas, "seats.seasonal");

    hc <- highchart(type = "stock") %>% 
      hc_add_series(seasonData, id = "Original", name = "Original-FL") %>% 
      hc_add_series(seasonData.seasonalData, id = "Seasonally Adjusted-FL", name = "Seasonally Adjusted") %>% 
      hc_add_series(seasonData.forecast[,c('forecast')], id = "Forecast-FL") %>% 
      hc_add_series(seasonData.forecast[,c('lowerci','upperci')], id = "ForecastRange-FL", keys = c('x', 'low', 'high'), type = "arearange")
    hc;

person wergeld    schedule 19.10.2017    source источник
comment
Это легко, если вы преобразуете свой объект в data.frame, а затем используйте hc_add_series(data, "arearange", hcaes(date, low = lowercol, high = highercol), id = "ForecastRange-FL", ...)   -  person jbkunst    schedule 19.10.2017
comment
Хорошо, скорее всего я что-то здесь упускаю. Но когда я конвертирую в data.frame через as.data.frame(season13201101FL.forecast), он теряет компонент времени, поэтому график не отображается.   -  person wergeld    schedule 19.10.2017
comment
не так прямолинейно, попробуйте извлечь время (а затем добавить), используя zoo::as.Date(stats::time(forecastobject$mean)   -  person jbkunst    schedule 19.10.2017
comment
Выполнение этой команды возвращает $ operator is invalid for atomic vectors при использовании в моем прогнозируемом объекте.   -  person wergeld    schedule 20.10.2017
comment
Чтобы помочь вам, нам нужен воспроизводимый пример от вас :) stackoverflow.com/questions/5963269/   -  person jbkunst    schedule 21.10.2017
comment
@jbkunst, добавлены образцы данных и полная логика выполнения.   -  person wergeld    schedule 23.10.2017
comment
вам не нужно отправлять / показывать свой csv, и пример использования Airpassangers достаточно   -  person jbkunst    schedule 23.10.2017


Ответы (1)


Один из подходов - преобразовать прогноз во фрейм данных со значениями и значениями даты / времени.

Чтобы получить значения datetime, вы можете использовать функции time и as.Date. Затем используйте hc_add_series, чтобы добавить данные.

library(highcharter)
library(dplyr)
library(tidyr)
library(seasonal)

seasonData <- AirPassengers
seasonData.seas <- seas(seasonData);
seasonData.seasonalData <- final(seasonData.seas);
seasonData.forecast <- series(seasonData.seas, "forecast.forecasts");
seasonData.seasComp <- series(seasonData.seas, "seats.seasonal");


time <- seasonData.forecast %>%
  stats::time() %>%
  zoo::as.Date() %>% 
  datetime_to_timestamp()

dfforecast <- seasonData.forecast %>% 
  as.data.frame() %>% 
  mutate(time = time)

highchart(type = "stock") %>% 
  hc_add_series(seasonData, id = "Original", name = "Original-FL") %>% 
  hc_add_series(seasonData.seasonalData, id = "Seasonally Adjusted-FL", name     = "Seasonally Adjusted") %>% 
  hc_add_series(seasonData.forecast[,c('forecast')], id = "Forecast-FL") %>% 
  hc_add_series(dfforecast, hcaes(x = time, low = lowerci, high = upperci),     id = "ForecastRange-FL", type = "arearange")

hc

введите здесь описание изображения

person jbkunst    schedule 23.10.2017