javascript - 更新系列颜色似乎会破坏导航器和范围选择器

标签 javascript jquery highcharts

我们希望允许用户将系列的颜色从单色渐变更改为发散色。我们通过下拉菜单执行此操作,我们捕获他们的选择并进行如下更新(比演示更简单的代码):

var rainbow = new Rainbow();
// Set start and end colors
rainbow.setSpectrum('#528bc2', 'white');
// Set the min/max range
var numSeries = chart.series.length;
var rangeLow = 0;
var rangeHigh = numSeries
rainbow.setNumberRange(rangeLow, rangeHigh);

// Loop over data and update the color value
for (index = 0; index < numSeries; ++index) {
    if (chart.series[index].name != 'Navigator') {
        if (chart.series[index].options.yAxis == 1) {
            chart.series[index].update({
                color: '#000080'
            }, false);
    } else {
        chart.series[index].update({
            color: '#' + rainbow.colourAt(index)
        }, false);
    }
    if (chart.series[index].visible) {
        var navigator = chart.get('nav');
        navigator.setData(chart.series[index].options.data);
    }
}

这确实会正确更新颜色,并且当用户想要改回原样时,我可以还原更改以使用数组中的另一个颜色列表。

图表已加载,因此一次只能看到一个系列,并且该系列用于导航器系列。当用户点击图例中的一个系列时,它会隐藏其他系列,使其不被绘制,只显示所选系列,更新导航器系列,并更新图表标题。当用户不更改颜色时,这很好用。

我面临的问题是,当用户在更改颜色时处于最初加载的系列以外的系列时,由于 图表,导航器系列将恢复为系列 [0] 数据集。正在调用 redraw()。调用更新代码后,如何让导航器系列干净利落地成为当前可见的系列?我尝试在颜色更新和 chart.events.load 之后放置这段代码(或类似的 block ),没有明显的影响:

for (i = 0; i < this.series.length; i += 1) {
    if (this.series[i].name != 'Navigator') {
        if (this.series[i].visible) {
        console.log(this.series[i].name);
        var navigator = this.get('nav');
        navigator.setData(this.series[i].options.data);
        }
    }
}

这是 jsFiddle 中要使用的一组实时数据. 要重现问题,请加载图表,然后单击图例中的“数据趋势 (%)”,使其在图表中可见。请注意,导航器系列已更改为该系列。现在,在下拉菜单中将所选值更改为“多色”。请注意系列的颜色是如何变化的,导航器系列数据也是如此。

最佳答案

Navigator 有两个引用系列的属性。第一个是它自己的系列对象——您更新它的数据属性,第二个是 baseSeries,它保持对图表中主要系列的引用。 http://jsfiddle.net/1jz3r78v/1/

如果将 baseSeries 设置为可见系列,它会按预期工作。

            serie[i].show();
            var navigator = this.chart.get('nav');
            this.chart.scroller.baseSeries = this; // serie[i]
            navigator.setData(serie[i].options.data);
            this.chart.setTitle({
              text: serie[i].name
            });

示例:https://jsfiddle.net/yct6y11m/1/

关于javascript - 更新系列颜色似乎会破坏导航器和范围选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38922227/

相关文章:

javascript - Highcharts 在 ie 11 中不起作用

javascript - 在 Highcharts 中格式化点值

javascript - 仅在点击按钮后显示 Google 客户评论

javascript - 如何裁剪 Canvas 边?

javascript - 如何在 Vue Js 中使用 swiper 断点

javascript - 将普通日期转换为 ISO-8601 格式

highcharts - ASP.NET WebRequest 到 Highcharts 导出服务器

javascript - 删除 JSON 属性

javascript - 滚动页面后的 jQuery slideUp 错误

javascript - 如何使用 jQuery 定位 img 元素的 src 属性?