在不同时间间隔具有多个系列的 Dygraph

Dygraph with multiple series at different time intervals

我有 2 组具有不同时间间隔的时间序列,我试图在单个 dygraph 图中显示它们;

我希望阶段设置为折线图,降雨量显示为类似于下面的阶梯图。

我的问题是,据我所知,您必须将您的时间序列绑定在一起,以便创建多序列 dygraph。 Cbind 用 NA 填充 'missing' 点,导致我的图表出现孤立的降雨点,就像这样

有没有什么方法可以在不将所有内容组合成 1 个时间序列对象的情况下在 dygraph 中叠加绘图?或者,有人有任何巧妙的方法在 cbind 期间填写 NAs 吗?我现在有一段相当不雅的代码来在 cbind 之后填写 NA...


第二个图的示例代码

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) %>%

您可以使用 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)

有关填充 NA 的更深入讨论,另请参阅 here