highcharts - 更新系列时出错的类别比以前少

时间:2012-05-18 18:31:39

标签: jquery highcharts

当新数据的列(类别)比以前更少时,我遇到了更新highcharts图表的问题。

小提琴:http://jsfiddle.net/ggoforth/bZAF7/

考虑我有一个类似的图表:

var chart = new Highcharts.Chart({
    chart: {
        renderTo: 'container',
        type: 'column'
    },
    xAxis: {
        categories: ['pizza', 'french fries']  
    },
    series: [{
        data: [55, 32]   
    }]
});

这将呈现包含两列的柱形图。然后,通过一些按钮我做:

chart.series[0].setData([55, 32, 17], false);
chart.xAxis[0].setCategories(['pizza', 'french fries', 'nachos'], false);
chart.redraw();

然后,这将更新图表以包含三列。这一切都很好。但是,如果以后再次使用2列刷新图表:

chart.series[0].setData([55, 32], false);
chart.xAxis[0].setCategories(['pizza', 'french fries'], false);
chart.redraw();

我收到错误“选项未定义”。这是可重复的,这里有一个小问题:http://jsfiddle.net/ggoforth/bZAF7/

在设置新数据之前,我是否需要先在图表上进行某种“重置”?就像我说的那样,当从2列开始时它起作用 - > 3列,但反之亦然。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

如果你删除系列并重新添加它,它会起作用:

   try {
        chart.series[0].remove();
        chart.addSeries({});
        chart.series[0].setData([55, 32], false);
        chart.xAxis[0].setCategories(['pizza', 'french fries'], false);
        chart.redraw();
    } catch (e) {
        alert(e);   
    }

更新了小提琴here

答案 1 :(得分:2)

您可以删除以下行:

chart.xAxis[0].setCategories(['pizza', 'french fries'], false);

<强> Demo

正如您所看到的,问题是您的新数据不能少于您的类别编号,因此您必须先更新您的类别而不是您的系列。如下例所示。
http://jsfiddle.net/bZAF7/6/

因此,要解决此问题,您必须撤消以下行。

chart.series[0].setData([55, 32], false);
chart.xAxis[0].setCategories(['pizza', 'french fries'], false);

更新:正如Greg在评论中所说,这是来自Highcharts https://github.com/highslide-software/highcharts.com/issues/970的一个错误,可能它已经修复了最新的Highcharts版本。