在highcharts中,我使用xAxys和yAxis属性来格式化插入的数据。两个斧头使用的代码是相同的,因此我只张贴其中一个:
$('#containers').highcharts({
....
....
yAxis: {
tickPositioner: function () {
var positions = [],
tick = Math.floor(this.dataMin),
increment = Math.ceil((this.dataMax - this.dataMin) / 6);
for (; tick - increment <= this.dataMax; tick += increment)
{
positions.push(tick);
}
return positions;
}
},
....
series: []
});
我已经声明
series: []
为空数组。除此之外,我创建了一个数组,并使用addSeries函数将系列添加到绘图中
var chart = $('#containers').highcharts();
var data = [[[2,194.1],[3,95.6],[4,54.4],[5,29.9],[6,71.5], [7,106.4],[8,129.2],[9,144.0],[10,176.0],[11,135.6],[12,148.5], [13,216.4]],[294.1, 195.6, 154.4, 129.9, 171.5, 106.4, 229.2, 154.0, 276.0, 35.6, 48.5, 116.4]]
for( i in data){
chart.addSeries({
data: data[i]
});
}
当我上面没有操作这些数据时,此代码可以很好地工作,我可以将其直接声明为highcharts选项。如果我选择使用
addSeries
,即使我注释了xAxys
和yAxys
选项,也无法使用。问题:在进行数据操作时,如何使用xAxys和yAxys属性?
这是恢复我的代码的小提琴:DEMO
最佳答案
在没有数据的初始图表加载中,您的tickPositioner
函数将变成一个无限循环(它使chrome崩溃了)。只需在初始负载时对此加以保护:
tickPositioner: function () {
if (this.dataMax == null){
return []; // prevents infinite loop...
}
var positions = [],
tick = Math.floor(this.dataMin),
increment = Math.ceil((this.dataMax - this.dataMin) / 6);
for (; tick - increment <= this.dataMax; tick += increment) {
positions.push(tick);
}
return positions;
}
您还应该考虑不要在每个
addSeries
上重绘:for (i in data) {
chart.addSeries({
data: data[i]
}, false); // do not redraw after every series add
}
chart.redraw(); // redraw chart when done
更新了fiddle。