动态更改baseSeries以获取实时图表

时间:2014-09-29 13:12:33

标签: highcharts highstock

我正在使用高库存图表组件来显示实时信号。它需要在运行时添加和删除信号,但仅限于总共7个信号。我正在为每个信号创建一个序列。我每隔一秒获得一次信号数据WebApi采用以下格式

[{"键":"信号1""值":2150,"时间戳":" 2014-09 -29T18:20:23.0008365 + 05:30"},{"键":"信号2""值" 197"时间戳& #34;:" 2014-09-29T18:20:23.0008365 + 05:30"}, {"键":"第三信号""值":200,"时间戳":" 2014-09-29T18:20 :23.0008365 + 05:30"}]

系列

指数| ID /名称

0 - 信号1 1 - 信号2
2 - Signal3

导航

指数| ID /名称

3 - Navigaotr

默认情况下,Navigator始终引用系列0。 但是当删除系列0时,导航器停止工作。 我对此进行了很多调查,并找到了解决方法,如下所示。

var nav = chart.get('Navigator');
nav.setData(chart.series[1].options.data, true, true, true);

但是如果遵循上述程序,Navigator只复制已经存在于系列1和图表中的数据以及Navigator停止动画。但是,当每秒通过新的点添加到系列1时,预期的行为是Navigator以及图表应该是动画的。 ajax调用WebApi。对WebApi的ajax调用如下。

function requestData() {
$.ajax({
    type: 'GET',
    url: requestUrlString,
    success: function(point) {
        if (point.length > 0 && point.length < 8) {

            if (chart.series.length > 0) {

                var series = chart.series[0],
                    shift = series.options.data.length > 20 * 60 ; // shift if the series is longer than 20

                var dateTime = new Date(point[0].TimeStamp);

                for (i = 0; i < point.length; i++) {

                    if (chart.get(point[i].Key) != null) {
                        chart.get(point[i].Key).addPoint([dateTime.getTime(), point[i].Value], false, shift);
                    }
                }
                chart.redraw();                    
            }

        }
    },
    error: function(err) {
        alert(err);
    },
    cache:false
});

}

用于更改baseSeries的方法如下所示。

function changeBaseSeries() {    

        chart.series[0].update({
            data: [],
            showInLegend: false
        });
        var nav = chart.get('Navigator');
        nav.setData(chart.series[1].options.data, true, true, true);
        nav.update({ baseSeries: 1 });       
}

请您就此提供任何意见?

我试过了chart.xAxis [0] .setExtremes();以及在changeBaseSeries()中,但Navigator仍然没有动画。

1 个答案:

答案 0 :(得分:0)

一些线索:

  • 您的数据字段名称需要x和y值。
  • 日期需要是时间戳(以毫秒为单位的时间)