在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,即使我注释了xAxysyAxys选项,也无法使用。

问题:在进行数据操作时,如何使用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

09-19 00:44