如何创建一个Hight Charts图表,用真实数据每秒更新一次?

时间:2013-11-23 22:11:11

标签: javascript jquery charts highcharts

有没有办法创建一个图表,使用像one这样的实际数据每秒更新一次? 我无法理解。我基本上想要一个每秒都用数据更新的图表。我使用我的数据更新了fiddle,但无法使其正常工作。

我在网上发现的每个例子都涉及随机数据,但我无法弄清楚如何使用我的数据而非随机数据。

我知道它与代码的这一部分有关:

events: {
    load: function() {

      // set up the updating of the chart each second
      var series = this.series[0];
      setInterval(function() {
      var x = (new Date()).getTime(), // current time
      y = Math.random();
      series.addPoint([x, y], true, true);
    }, 1000);
  }
}

1 个答案:

答案 0 :(得分:1)

在此处查看我的更改:http://jsfiddle.net/KXpF7/3/

首先,您的数据格式错误,因为它只是一维,不能用于呈现(x,y)

data: [[3,11,0,3,4,40,2,11,1,5,40,12,11,40,1,40,12,2,3,2,1,12,1,0,1,15,1,4,12,0,4,5,4,12,15,12,1,2,12,2,3,10,4,15,5,4,12,11,0,15,4,40,4,15,1,4,4,40,12,15,1,0,0,5,11,12,15,0,2,4,11]]; // wrong format

您可以使用数组将所有历史数据放在[x,y]格式中,您可以在xAxis和系列声明中的两个类别中使用。

var historicalData = [['2013-11-20 15:00:00',3],['2013-11-20 16:00:00',11],['2013-11-20 17:00:00',0],['2013-11-20 18:00:00',3],['2013-11-20 19:00:00',4],['2013-11-20 20:00:00',40],['2013-11-20 21:00:00',2],['2013-11-20 22:00:00',11],['2013-11-20 23:00:00',1],['2013-11-21 00:00:00',5],['2013-11-21 01:00:00',40]]; // finish the rest data by yourself

在开始时,您将显示historicalData的前N个数据点。 (根据您的需要修改var defaultDataNum = 5;

        series: [{
            name: 'Real data',
            data: (function() {
                var data = [];
                // display the first defaultDataNum points in the beginning
                for (var i = 0; i < defaultDataNum; i++) {
                    data.push(historicalData[i]);
                }
                return data;
            })()
        }]

然后从历史数据中再获得一点,然后每1秒钟显示一次。

        var intervalId = setInterval(function() {
            series.addPoint(historicalData[currentDataPos], true, true);
            currentDataPos++;
            // stop update when finish display all data
            if(currentDataPos == historicalData.length)
               clearInterval(intervalId);
        }, 1000);

这是基本想法,请参阅我的jsfiddle了解所有细节。