потоковая передача нескольких рядов в highcharts

#json #dynamic #highcharts #series

#json #динамический #высокие диаграммы #Серии

Вопрос:

Я использую websockets для потоковой передачи действительного JSON в highcharts.js . Моя цель — нанести несколько линий одновременно на один и тот же график. JSON, которым я управляю, содержит данные 4-16 серий (называемые синтаксическими анализаторами), которые я хотел бы наложить на highcharts. Пример JSON:

 [
    {
        "y": 91,
        "x": 1403640998,
        "name": "parser1"
    },
    {
        "y": 184,
        "x": 1403640998,
        "name": "parser2"
    },
    {
        "y": 26,
        "x": 1403640998,
        "name": "parser3"
    }
]
 

Я могу вывести одну строку на график, но они объединяются в одну серию. Я хотел бы динамически корректировать серию в зависимости от количества парсеров, которые я отслеживаю. Если мой JSON содержит информацию для 3 парсеров, как я опубликовал выше, я бы хотел, чтобы 3 строки автоматически обновлялись каждую секунду.

Как вы можете видеть, я могу показать только 1. скриншот моей единственной строки

Мой HTML

 <script type="text/javascript">
$(function () {
    $('#container').highcharts({
        chart: {
            type: 'spline',
            events: {
                load: function () {
                    var $message = $('#message');
                    var connection = new WebSocket('ws://x.x.x.x:8888/ws');
                    var self = this;

                    connection.onmessage = function(event) {
                        var data = JSON.parse(event.data);
                        var series = self.series[0];
                        var redrawVal = true;
                        var shiftVal = false;
                        if (series.data amp;amp; series.data.length > 25) {shiftVal = true;}

                        var newseries = {
                            name: '',
                            x: 0,
                            y: 0
                        };


                        $.each(data, function(i,item){
                            newseries.name = item.name;
                            newseries.x = item.x;
                            newseries.y = item.y;

                            console.log(newseries)
                            series.addPoint(newseries, redrawVal, shiftVal);

                        });

                    };
                }
            }
        },
        title: {
            text: 'Using WebSockets for realtime updates'
        },
        xAxis: {
            type: 'date'
        },
        series: [{
            name: 'series',
        data: []
        }]

    });
});
 

Может кто-нибудь помочь мне получить несколько серий для динамического отображения в highcharts.js ?

Комментарии:

1. это может показаться многообещающим, завтра мы рассмотрим это подробнее: jsfiddle.net/MMjN2/6

Ответ №1:

Общая идея должна заключаться в том, что для каждой серии вы устанавливаете ее id . Тогда вы можете получить эту серию следующим образом: . chart.get(id) Итак, если у вас есть серия, добавьте точку в эту серию, если нет, то создайте новую, вот так: http://jsfiddle.net/9FkJc/8 /

             var self = this;
            data = [{
                "y": 91,
                    "x": 1403640998,
                    "name": "parser1"
            }, {
                "y": 184,
                    "x": 1403640998,
                    "name": "parser2"
            }, {
                "y": 26,
                    "x": 1403640998,
                    "name": "parser3"
            }];

            var series = self.series[0];
            var redrawVal = true;

            $.each(data, function (i, item) {
                var series = self.get(item.name);
                if (series) { // series already exists
                    series.addPoint(item, redrawVal, series.data.length > 25);
                } else { //  new series
                    self.addSeries({
                        data: [item],
                        id: item.name
                    });
                }
            });
 

Комментарии:

1. не знал о .addSeries. Спасибо за твою помощь, ты рок!