2

当新数据的列(类别)比以前少时,我在更新 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 列开始时有效,但反之则不然。

谢谢你的帮助!

4

2 回答 2

2

您可以删除以下行:

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

演示

如您所见,问题在于您的新数据不能少于您的类别编号,因此您必须先更新您的类别而不是您的 serie。像下面的例子。
http://jsfiddle.net/bZAF7/6/

因此,要解决此问题,您必须反转以下行。

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

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

于 2012-05-18T21:43:36.523 回答
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);   
    }

在这里更新了小提琴。

于 2012-05-18T20:46:56.220 回答