我做了这样的事情:
- 具有用于更改图数据的复选框
- 选中/取消选中该复选框后,通过相应地调用
series[i].update()
来更新系列数据数组。
但是我有一个问题,当一个系列被用户隐藏并尝试选中复选框然后取消选中,然后重新显示该系列时,该系列不会再次显示。
请注意,如果我只选中该框一次,则不会出现问题,只有在隐藏系列后多次选中该框时才会出现问题。
我在这里重现了这个问题(JSFiddle)
更新图的代码是:
if (chart) {
for (var i = 0; i < chart.series.length; i++) {
//chart.series[i].setVisible(true, true); // Note that if I add this code, then no problem
chart.series[i].update({
data: dataArray[i]
});
}
}
问题是你基于高图表生成的点。当序列处于隐藏状态时,点将不存在,您可以为序列设置空数据。换句话说,它看起来像这样: chart.series[i].setData( [] );
.
我建议对数据使用单独的数组,并将其用于计算。总体思路:http://jsfiddle.net/pGuEv/37/(我知道,它的工作方式有点不同,但显示了应该如何编写)
var origData = [
[11, 22, 33, 44, 55, 66, 77, 88],
[10, 20, 30, 40, 50, 60, 70, 80]
];
$('#container').highcharts({
series: [{
data: origData[0].slice()
}, {
data: origData[1].slice()
}]
});
后来:
for (var i = 0; i < origData.length; i++) { // original data
var onePlotData = [];
var sum = 0; //前面点的合计值s
for (var j = 0; j < origData[i].length; j++) { // original data
var value = origData[i][j]; // original data
var point = {
//x: value.x,
y: state ? value + sum : value - sum,
//total: value.total
}
sum = point.y;
onePlotData.push(point);
}
dataArray.push(onePlotData);
}