自动化 htmlwidget:多个时间序列的高图表生成

Automating htmlwidget: highchart graph generation for multiple time series

我想使用 htmlwidget 自动生成图形:highchart。

我得到了手动过程,但我很难概括它。 对于两个时间序列,还可以,但我想扩展到多个未预先确定的时间序列(ts)。

我考虑过用brew生成代码,用source,不过好像有点"heavy"的办法。

理想情况下,我的输入是一个包含所有 ts 和我想要的时间序列向量的数据集 select。 输入是一个 hygraph,所有 ts 都在我的向量中。

# dataset
dataset <- data.frame("Tokyo" = c(7.0, 6.9, 9.5, 14.5, 18.4, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6)
                      , "London" = c(3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8)
                      , "Paris" = c(2.9, 1.2, 2.4, 5.4, 8.6, 10.2, 16.0, 15.6, 12.2, 7.3, 3.6, 2.8))

# sets:
set1 <- c("Tokyo", "Paris")


# only with set 1:

highchart() %>%  
  hc_series(
    list(
      name = "Tokyo",
      data = c(7.0, 6.9, 9.5, 14.5, 18.4, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6)
    ),
    list(
      name = "Paris",
      data = c(2.9, 1.2, 2.4, 5.4, 8.6, 10.2, 16.0, 15.6, 12.2, 7.3, 3.6, 2.8)
    )
  )


# include n numbers of series, n undetermined (ex:3):
set <- c("Tokyo", "Paris", "London")

highchart() %>%  
  hc_series(
  ...      
  )

我已经使用表达式解决了我的问题:

以下代码有效:

## include n numbers of series, n undetermined:
set <- c("Tokyo", "Paris", "London")

sets.tab <- lapply(set, function(x) paste0("list(name = '", x, "', data = dataset[, '"
                    , x, "'])"))

no.parsed.expr <- paste0(sets.tab, collapse = "
                     , ")
end.code <- paste0("highchart() %>%  
  hc_series(", no.parsed.expr, ")")

eval(parse(text = end.code))

您可以使用 hc_add_series_list 函数:

# include n numbers of series, n undetermined (ex:3):
set <- c("Tokyo", "Paris", "London")

graph_data <- lapply(set, function(city) {
  list(name = city,
       data = dataset[[city]])
})

highchart() %>% 
  hc_add_series_list(graph_data)