如何让 highcharter 使用 tidy dataframe 中的 colorIndex 编号
How do I make highcharter use colorIndex number from tidy dataframe
问题:我试图强制 highcharter 始终只为每个系列使用特定颜色。
示例: 让我们使用 hc_colors
调色板和 colorIndex
。我有两张图表,一张 colorIndex
的编号为 2、3 和 5,另一张 colorIndex
的编号为 1、2 和 4。唯一常见的 colorIndex
数字是 2,并且我只希望这个指标在两个图表上共享相同的颜色。然而,结果是两个图表的颜色相同,甚至它们的指标数字也大不相同。
代码:我的例子问题可以通过运行以下代码实现:
library(dplyr)
library(highcharter)
library(viridisLite)
n <- 6
df <- data.frame(date = Sys.Date() - (n*10):1,
metric = rep(letters[1:n], 10),
index = rep((n+1):(n*2), 10),
value = runif((n*10), 0, 1))
highchart() %>%
hc_title(text = 'Views') %>%
hc_xAxis(type = "datetime") %>%
hc_add_series(data = df,
type = 'spline',
hcaes(x = date, y = value, group = metric, colorIndex = index)) %>%
hc_colors(viridis(n*2))
结果是,即使 hc_colors
包含的颜色是数据集中系列的两倍,并且用作 colorIndex
的索引仅包含 后半部分 of hc_colors
谱,前半部分使用:as can be seen in the chart。
但是,如果我将最后一行更改为:
hc_colors(viridis(n*2)[(n+1):(n*2)])
所以它只强制使用 hc_colors 的第二次停止,图像看起来不同。 As can be seen in the chart. 如果 highcharter 使用各自的颜色,这是预期的结果。
我也尝试过手动将颜色设置为“#RRGGBB”值,但结果更出乎意料——标记颜色只改变了
和线条颜色保持默认值:chart。
最后一个图表可以通过将 color = rep(viridis(n), 10)
添加到 dataframe 来实现,而不是设置 colorIndex,在 hceas 中设置 color = color
。从 highcharts documentation 看来,在标记的选项中设置 lineColor 可能会有所帮助,但我不确定我是否能够设置它,或者它是否没有改变任何东西。
我会在评论中询问详细信息,但我有一些代码想分享,所以我创建了一个答案。
我不知道 viridis 的具体工作原理。我发现,Highcharter 不是只为系列设置颜色,而是为点设置颜色。如果您在 Whosebug 上没有得到完整的答案,我建议您在这里联系 Highcharter 作者:https://github.com/jbkunst/highcharter/issues
我不知道你到底想实现什么,但你可以在 JavaScript 中使用 R JS("...") 函数和 chart.events.load 事件手动设置你的颜色
根据您想要实现的目标,您可以更改标记的颜色以适合系列颜色:
library(dplyr)
library(highcharter)
library(viridisLite)
n <- 6
df <- data.frame(date = Sys.Date() - (n*10):1,
metric = rep(letters[1:n], 10),
index = rep((n+1):(n*2), 10),
value = runif((n*10), 0, 1),
color = rep(viridis(n), 10))
highchart() %>%
hc_title(text = 'Views') %>%
hc_chart(events = list(load = JS("function () {
this.series.forEach(function (series) {
series.data.forEach(function (point) {
point.update({
color: series.color
}, false);
});
});
this.redraw();
}"))) %>%
hc_xAxis(type = "datetime") %>%
hc_add_series(data = df,
type = 'spline',
hcaes(x = date, y = value, group = metric, color = color)) %>%
hc_colors(viridis(n*2))
或者您可以更改系列颜色以适合标记:
library(dplyr)
library(highcharter)
library(viridisLite)
n <- 6
df <- data.frame(date = Sys.Date() - (n*10):1,
metric = rep(letters[1:n], 10),
index = rep((n+1):(n*2), 10),
value = runif((n*10), 0, 1),
color = rep(viridis(n), 10))
highchart() %>%
hc_title(text = 'Views') %>%
hc_chart(events = list(load = JS("function () {
this.series.forEach(function (series) {
series.update({
color: series.data[0].color
}, false);
});
this.redraw();
}"))) %>%
hc_xAxis(type = "datetime") %>%
hc_add_series(data = df,
type = 'spline',
hcaes(x = date, y = value, group = metric, color = color)) %>%
hc_colors(viridis(n*2))
希望对您有所帮助。随时分享您的想法,也许我会找到其他解决方案。
问题:我试图强制 highcharter 始终只为每个系列使用特定颜色。
示例: 让我们使用 hc_colors
调色板和 colorIndex
。我有两张图表,一张 colorIndex
的编号为 2、3 和 5,另一张 colorIndex
的编号为 1、2 和 4。唯一常见的 colorIndex
数字是 2,并且我只希望这个指标在两个图表上共享相同的颜色。然而,结果是两个图表的颜色相同,甚至它们的指标数字也大不相同。
代码:我的例子问题可以通过运行以下代码实现:
library(dplyr)
library(highcharter)
library(viridisLite)
n <- 6
df <- data.frame(date = Sys.Date() - (n*10):1,
metric = rep(letters[1:n], 10),
index = rep((n+1):(n*2), 10),
value = runif((n*10), 0, 1))
highchart() %>%
hc_title(text = 'Views') %>%
hc_xAxis(type = "datetime") %>%
hc_add_series(data = df,
type = 'spline',
hcaes(x = date, y = value, group = metric, colorIndex = index)) %>%
hc_colors(viridis(n*2))
结果是,即使 hc_colors
包含的颜色是数据集中系列的两倍,并且用作 colorIndex
的索引仅包含 后半部分 of hc_colors
谱,前半部分使用:as can be seen in the chart。
但是,如果我将最后一行更改为:
hc_colors(viridis(n*2)[(n+1):(n*2)])
所以它只强制使用 hc_colors 的第二次停止,图像看起来不同。 As can be seen in the chart. 如果 highcharter 使用各自的颜色,这是预期的结果。
我也尝试过手动将颜色设置为“#RRGGBB”值,但结果更出乎意料——标记颜色只改变了
和线条颜色保持默认值:chart。
最后一个图表可以通过将 color = rep(viridis(n), 10)
添加到 dataframe 来实现,而不是设置 colorIndex,在 hceas 中设置 color = color
。从 highcharts documentation 看来,在标记的选项中设置 lineColor 可能会有所帮助,但我不确定我是否能够设置它,或者它是否没有改变任何东西。
我会在评论中询问详细信息,但我有一些代码想分享,所以我创建了一个答案。
我不知道 viridis 的具体工作原理。我发现,Highcharter 不是只为系列设置颜色,而是为点设置颜色。如果您在 Whosebug 上没有得到完整的答案,我建议您在这里联系 Highcharter 作者:https://github.com/jbkunst/highcharter/issues
我不知道你到底想实现什么,但你可以在 JavaScript 中使用 R JS("...") 函数和 chart.events.load 事件手动设置你的颜色
根据您想要实现的目标,您可以更改标记的颜色以适合系列颜色:
library(dplyr)
library(highcharter)
library(viridisLite)
n <- 6
df <- data.frame(date = Sys.Date() - (n*10):1,
metric = rep(letters[1:n], 10),
index = rep((n+1):(n*2), 10),
value = runif((n*10), 0, 1),
color = rep(viridis(n), 10))
highchart() %>%
hc_title(text = 'Views') %>%
hc_chart(events = list(load = JS("function () {
this.series.forEach(function (series) {
series.data.forEach(function (point) {
point.update({
color: series.color
}, false);
});
});
this.redraw();
}"))) %>%
hc_xAxis(type = "datetime") %>%
hc_add_series(data = df,
type = 'spline',
hcaes(x = date, y = value, group = metric, color = color)) %>%
hc_colors(viridis(n*2))
或者您可以更改系列颜色以适合标记:
library(dplyr)
library(highcharter)
library(viridisLite)
n <- 6
df <- data.frame(date = Sys.Date() - (n*10):1,
metric = rep(letters[1:n], 10),
index = rep((n+1):(n*2), 10),
value = runif((n*10), 0, 1),
color = rep(viridis(n), 10))
highchart() %>%
hc_title(text = 'Views') %>%
hc_chart(events = list(load = JS("function () {
this.series.forEach(function (series) {
series.update({
color: series.data[0].color
}, false);
});
this.redraw();
}"))) %>%
hc_xAxis(type = "datetime") %>%
hc_add_series(data = df,
type = 'spline',
hcaes(x = date, y = value, group = metric, color = color)) %>%
hc_colors(viridis(n*2))
希望对您有所帮助。随时分享您的想法,也许我会找到其他解决方案。