自动化 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)
我想使用 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)