每隔1分钟生成一次随机数据:高图

时间:2019-06-18 09:37:17

标签: highcharts

我创建了一个样条实时图表,希望在该图表上定期显示点。

每点都是一分钟后发生的事件。但是,我很难理解所有动静的部分:

  1. 我提到的highchart演示上的间隔函数每1秒更新一次,我将其设为6000。

  2. javascript中的虚拟更新仅需要花费最新时间并将其追加,是否应该在其中引入一些延迟?

  3. 序列中的虚拟初始化数据有一个for循环,我也无法理解。我了解到javascript会产生UNIX时间戳及其毫秒操作,但是默认代码(再次从highchart演示中稍作修改)从-9999到0,并且是一个数字的倍数。

我想了解这些部分,并确保每次我的x轴“向右倾斜”时,我有一分钟的时间间隔,并且在图表上只有一个点。

PS:请原谅任何遗漏的括号,发布问题时可能会遗漏它们,但我向您保证这不是问题。

这是我的系列代码:

           series: [{
                type: 'spline',
                name: 'Random data',
                data: (function () {
                    // generate an array of random data
                    var data = [],
                        time = (new Date()).getTime(),
                        i;

                    for (i = -9999; i <= 0; i += 1) {
                        data.push([
                            time + i * 60000,
                            Math.round(Math.random() * 100) + 10
                        ]);
                    }
                    return data;
                }())
            }]

这是我的图表代码:

chart: {
 events: {
           load: function () {

             // Set up the updating 
             var series = this.series[0];

             setInterval(function () {
               var x = (new Date()).getTime(), // current time
               y = Math.round(Math.random() * 100) + 10

               series.addPoint([x, y], true, true);
             }, 6000);
           }
         }
       }

1 个答案:

答案 0 :(得分:0)

关于您的问题:

  1. 如果要间隔1分钟,则需要使用60000值(60 * 1000),6000毫秒为6秒。

  2. 间隔函数中的当前日期每隔6000毫秒,这导致数据每隔6000毫秒出现间隔。

  3. 数据初始化取决于从当前时间戳中减去六秒的倍数:


data: (function() {
    // generate an array of random data
    var data = [],
        time = (new Date()).getTime(),
        i;

    for (i = -9999; i <= 0; i += 1) {
        if (i === -500) {
            console.log(time, i, 60000); // 1560941909847 + (-500 * 60000)
            console.log(time + i * 60000); // 1560911909847
        } else if (i === -499) {
            console.log(time, i, 60000); // 1560941909847 + (-499 * 60000)
            console.log(time + i * 60000); // 1560911969847
        } else if (i === 0) {
            console.log(time, i, 60000); // 1560941909847 + (0 * 60000)
            console.log(time + i * 60000); // 1560941909847 = actual time
        }
        data.push([
            time + i * 60000,
            Math.round(Math.random() * 100) + 10
        ]);
    }
    return data;
}())