用Highcharts画图时,经常需要更新所画的图表,最常见的就是改变数据以更新图表。在Highcarts中,数据对应的参数是series。这儿就以图1的柱状图为例,列举如何更新series的5种方法,以供参考。

1. series.update
Highcarts图表中,可以有多个series。当我们想更新其中某一个series时,可以直接调用其update方法。效果如图2所示。
1 2 3 |
chart.series[0].update({ data: [29.9, 71.5, 306.4, 429.2, 144.0, 176.0, 135.6, 248.5, 216.4, 194.1, 95.6, 54.4] }); |

2. chart.update
如果想一次性更新多个series,那么就可以直接使用chart.update。除了series,其他参数也可以同时进行更新。要注意的是,chart.update只允许更新原来的series,不允许新增series。比如在这个例子里,只能更新原来的一个或两个series,哪怕多加series,也不会起作用。效果如图3所示。
1 2 3 4 5 6 7 8 9 10 11 |
chart.update({ series: [{ type: 'column', name: 's1', data: [129.9, 171.5, 306.4, 429.2, 144.0, 176.0, 135.6, 248.5, 216.4, 194.1, 95.6, 54.4] },{ type: 'column', name: 's2', data: [69.9, 51.5, 176.4, 121.2, 124.0, 476.0, 935.6, 248.5, 266.4, 191.1, 99.6, 53.4] }] }); |

3. chart.addSeries
如果想要新增series,就得使用chart.addSeries了。一次只能加一个series。注意这个方法有性能问题,当series的长度很长, 且一次性加好多series的时候,图表的反应会很慢。效果如图4所示。
1 2 3 4 5 |
chart.addSeries({ type: 'column', name: 's3', data: [129.9, 171.5, 1106.4, 1129.2, 144.0, 176.0, 135.6, 1148.5, 216.4, 194.1, 95.6, 54.4] }); |

4. series.remove & chart.addSeries
当我想完全替换原来的series,而不仅仅是在上面做更新和新增的时候,可以采用series.remove和chart.addSeries结合的方法。也就是说,要先去掉所有原来的series,再逐个加入新的。同样,这个方法有性能问题。效果如图5所示。
1 2 3 4 5 6 7 8 9 10 11 |
seriesData = [{ type: 'column', name: 's1 new', data: [234.9, 171.5, 1106.4, 1129.2, 144.0, 176.0, 135.6, 1148.5, 216.4, 194.1, 195.6, 454.4] }]; while (chart.series.length > 0) { chart.series[0].remove(true); } for (var i = 0; i < seriesData.length; i++) { chart.addSeries(seriesData[i]); } |

5. series.remove/chart.addSeries & chart.update
第4种方法由于使用了chart.addSeries,导致性能上可能会出现问题。这儿就用一种替换的方法来实现同样的效果。关键就是要比较原来series的数目和新的series的数目,当两个数目不同时,通过series.remove或者chart.addSeries使其相等,再统一调用一次chart.update实现图表的更新。源代码如下。当新的series数目大于原来的时候,效果如图6所示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
seriesData = [{ type: 'column', name: 's1 new', data: [234.9, 171.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 195.6, 454.4] },{ type: 'column', name: 's2 new', data: [234.9, 171.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 195.6, 454.4] },{ type: 'column', name: 's3 new', data: [234.9, 171.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 195.6, 454.4] }]; var diff = chart.series.length - seriesData.length; if(diff > 0){ for (var i = chart.series.length; i > diff; i--){ chart.series[i-1].remove(true); } } else if (diff < 0){ for (var i = chart.series.length; i < seriesData.length; i ++){ chart.addSeries({}); } } chart.update({ series:seriesData }); |

转载请注明:北凉柿子 » Highcharts中更新series的5种方法