隐藏Highcharts和jQuery中的_groups_系列:如何获得可接受的性能?

我正在使用Highcharts来表示时间序列组。 因此,从同一个体收集的数据点通过线连接,并且来自属于同一组的个体的数据点共享相同的颜色。 Highcharts图例显示了每个单独的时间序列而不是组,而且我有超过一百个时间序列,以这种方式隐藏和显示数据是丑陋和不切实际的。

相反,我制作了按钮并使用jQuery将它们与在时间序列中搜索匹配颜色的函数相关联,并切换每个匹配系列的可见性。

以下是一个包​​含小数据集的示例: http : //jsfiddle.net/bokov/VYkmg/6/

以下是该示例中的系列隐藏function:

$("#button").click(function() { if ($(this).hasClass("hideseries")) { hs = true; } else { hs = false; } $(chart.series).each(function(idx, item) { if (item.color == 'green') { if (hs) { item.show(); } else { item.hide(); } } }); $(this).toggleClass("hideseries"); }); 

以上工作。 问题是,我的真实数据可能有超过一百个单独的时间序列,看起来像检查每个系列的颜色真的很慢。 那么,有人能提出一种更有效的方法来解决这个问题吗? 是否有一些内置的Highcharts方法已经这样做了? 或者,我可以给jQuery一个更具体的选择器吗?

我试着深入研究由Highcharts创建的元素,但我无法弄清楚哪些子元素对应于图表中的系列。

谢谢。

这里的问题是Highcharts在每次系列更改后都会重新绘制图表。 我检查了API,看看是否有一个你可以传递的参数推迟,但似乎并非如此。

相反,您可以将重绘方法存根,直到准备好,如下所示:

 var _redraw = chart.redraw; chart.redraw = function(){}; //do work chart.redraw = _redraw; chart.redraw(); 

在这里查看完整的示例。 对我来说,这样做的速度要快10倍左右。

不是为每个系列调用show()hide() ,而是调用setVisible(/* TRUE OR FALSE HERE */, false); 。 第二个参数是redraw参数,您可以避免为每个系列引起重绘(这很慢)。

然后,在完成更改可见性之后,请调用chart.redraw() 一次

http://api.highcharts.com/highcharts#Series.setVisible