具有不同时间间隔的多个序列的笔形图

时间:2018-08-29 05:13:07

标签: r time-series dygraphs

我有两组时间序列,它们具有不同的时间间隔,我试图在一张线图中显示它们;

  • 阶段(河流级别)和建模阶段-间隔5或15分钟
  • 降雨量和预报降雨量-3小时间隔

我希望将舞台设置为折线图,并将降雨显示为类似于下面的阶梯图。

Old static version on the plot

我的问题是,据我所知,您必须将您的时间序列绑定在一起,以创建多序列的笔形图。 Cbind用NA填充“缺失”点,导致我的图形出现像这样的孤立降雨点

Dygraph version displays rainfall as instantaneous points

在没有将所有内容都组合到1个时间序列对象中的情况下,有没有什么方法可以在测功图中超标?或者,有人在绑定过程中是否有任何聪明的方法来填充NA?现在,在绑定之后,我有一些相当不起眼的代码来填写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) %>%

1 个答案:

答案 0 :(得分:2)

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

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