如何让highcharter使用tidy数据框架中的colorIndex数字?

问题描述 投票:0回答:1

问题:我正试图强迫highcharter对每个系列只使用特定的颜色。 我想强制要求highcharter在每个系列中只使用一种特定的颜色。

例子:我想在每个系列中只使用特定的颜色。 让我们使用 hc_colors 托盘,以及 colorIndex. 我有两张图,一张是 colorIndex2号、3号和5号,还有一个是......。colorIndex1、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可能会有帮助,但我不确定我是否能够设置它,或者它是否没有任何改变。

r highcharts r-highcharter
1个回答
0
投票

我会要求在评论中的细节,但我有一些代码,我想分享,所以我创建一个答案。

我不知道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))

我希望我帮了你一点忙。欢迎分享你的想法,也许我会找到另一种解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.