问题:我正试图强迫highcharter对每个系列只使用特定的颜色。 我想强制要求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
只包含 下半场 的 hc_colors
谱,前半部分是用。从图中可以看出然而,如果我把最后一行改为:
hc_colors(viridis(n*2)[(n+1):(n*2)])
这样就可以强制执行hc_colors的第二次停止,图像看起来就不一样了。从图中可以看出。 如果highcharter使用了相应的颜色,这就是预期的结果。
我也试过手动设置颜色为 "#RRGGBB",但结果更出乎意料--标记的颜色只被改变,而线条的颜色保持默认。图表.最后一张图可以通过添加 color = rep(viridis(n), 10)
到数据帧,并且在hceas中不设置colorIndex,而是设置为 color = color
. 来自高图 文件 似乎在markers选项中设置lineColor可能会有帮助,但我不确定我是否能够设置它,或者它是否没有任何改变。
我会要求在评论中的细节,但我有一些代码,我想分享,所以我创建一个答案。
我不知道viridis究竟是如何工作的。我发现,而不是只为系列设置颜色,Highcharter也为点设置。如果你在StackOverflow这里没有得到完整的答案,我建议在这里联系Highcharter作者。https:/github.comjbkunsthighcharterissues。
我不知道你到底想实现什么,但你可以在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))
我希望我帮了你一点忙。欢迎分享你的想法,也许我会找到另一种解决方案。