异步添加历史记录到现有的HighStock图表

时间:2013-06-24 08:22:28

标签: asynchronous highstock

我正在编写一个网页,其中显示了来自ThingSpeak的HighStock数据图表。它将数据调用限制为8000点,因此我需要多次调用来加载整个数据集。我计划在最新数据进入时显示图表,然后添加早期数据。我第一次尝试使用addPoint()将导航器扩展回1970,但不添加数据。添加日期早于当前数据的数据是否存在问题?我应该如何编写脚本?

以下是我调用addPoint()方法的方法:

dynamicChart.series[fieldList[fieldIndex].series]
          .addPoint(fieldList[fieldIndex].data,false);

和我发送的Array []:

fieldList: Array[3]
  0: Object
    data: Array[8000]
      0: Array[2]
          0: 1371821816000
          1: 36.79
        length: 2
        __proto__: Array[0]
      1: Array[2]
          0: 1371821836000
          1: 36.75
        length: 2
        __proto__: Array[0]
      2: Array[2]
      3: Array[2]
      4: Array[2]

我尝试将turboThreshold增加到10000,但它没有帮助。

然后我用这个替换了add points()行:

dynamicChart.series[fieldList[fieldIndex].series].addPoint({},false);

......并得到了相同的结果。这里发生了什么?我的数据对象有什么问题?

1 个答案:

答案 0 :(得分:0)

addPoints()方法只添加一个点。

我的解决方案是将新点推入原始数组,对其进行排序,然后使用setData()更新系列:

for (var h=0; h<data.feeds.length; h++)  // iterate through each feed (data point)
{
  // if a numerical value exists add it
  if (!isNaN(parseInt(v))) { fieldList[fieldIndex].data.push(p); }
}

fieldList[fieldIndex].data.sort(function(a,b){return a[0]-b[0]});
dynamicChart.series[fieldList[fieldIndex].series].setData(fieldList[fieldIndex].data,false);

排序非常重要,如果订单没有增加,则不会显示新数据。