Dygraph с несколькими сериями в разные промежутки времени - PullRequest
0 голосов
/ 29 августа 2018

У меня есть 2 набора временных рядов с разными временными интервалами, которые я пытаюсь показать на одном графике;

  • Стадия (уровень реки) и смоделированная сцена - интервал 5 или 15 минут
  • Количество осадков и прогноз осадков - с интервалом в 3 часа

Мне бы хотелось, чтобы на установленном этапе был линейный график, а осадки выпадали в виде пошагового графика, аналогичного приведенному ниже.

Old static version on the plot

Моя проблема в том, что, насколько я вижу, вы должны связать свои временные ряды вместе, чтобы создать многосерийный рисунок. Cbind заполняет «пропущенные» точки с помощью NA, в результате чего мой график появляется с изолированными точками осадков, например

Dygraph version displays rainfall as instantaneous points

Есть ли какой-нибудь способ перепланировать в dygraph, не объединяя все в один объект временного ряда? Или у кого-нибудь есть какие-нибудь умные методы для заполнения NA во время cbind? У меня есть довольно не элегантный фрагмент кода для заполнения NA после cbind в данный момент ...


Пример кода для второго сюжета

stage <- zoo(sample(1:100, 154, replace=TRUE), seq(as.POSIXct("2018-08-23"), as.POSIXct("2018-08-31"), by = 4500))
rain <- zoo(sample(1:100, 154, replace=TRUE), seq(as.POSIXct("2018-08-23"), as.POSIXct("2018-08-31"), by = 54000))

eventData <- cbind(stage, rain)

dygraph(eventData, main = "Sitename") %>% 
  dyOptions(useDataTimezone = TRUE, colors = colour, drawGrid = F) %>%
  dyAxis("y", label = "Stage", valueRange = c(0, maxStage+maxStage*.2), independentTicks = TRUE) %>%
  dyAxis("y2", label = "Rainfall ", valueRange = c(0, maxRain+maxRain*.5), independentTicks = TRUE) %>%
  dySeries("Stage", axis=('y')) %>%
  dySeries("Rainfall", axis=('y2'), stepPlot = T, fillGraph = T) %>%

1 Ответ

0 голосов
/ 29 августа 2018

Вы можете использовать функцию zoo::na.locf для заполнения пропущенных строк.

В вашем примере:

stage <- zoo(sample(1:100, 154, replace=TRUE), seq(as.POSIXct("2018-08-23"), as.POSIXct("2018-08-31"), by = 4500))
rain <- zoo(sample(1:100, 154, replace=TRUE), seq(as.POSIXct("2018-08-23"), as.POSIXct("2018-08-31"), by = 54000))

eventData <- cbind(stage, rain)
head(eventData)

                    stage rain
2018-08-23 00:00:00    85   61
2018-08-23 01:15:00    71   NA
2018-08-23 02:30:00    10   NA
2018-08-23 03:45:00    16   NA
2018-08-23 05:00:00    31   NA
2018-08-23 06:15:00    92   NA

# fill NAs with na.locf

eventData <- na.locf(eventData)
head(eventData)

                    stage rain
2018-08-23 00:00:00    85   61
2018-08-23 01:15:00    71   61
2018-08-23 02:30:00    10   61
2018-08-23 03:45:00    16   61
2018-08-23 05:00:00    31   61
2018-08-23 06:15:00    92   61

Это можно построить так, как вы хотите:

library(dygraphs)
dygraph(eventData, main = "Sitename") %>% 
  dyOptions(drawGrid = F) %>%
  dyAxis("y", label = "Stage", independentTicks = TRUE) %>%
  dyAxis("y2", label = "Rainfall ", independentTicks = TRUE) %>%
  dySeries("stage", axis=('y')) %>%
  dySeries("rain", axis=('y2'), stepPlot = T, fillGraph = T)

enter image description here

См. Также здесь для более глубокого обсуждения заполнения NA.

...