данные в миллисекундах отсутствуют в исторических данных старших графиков - PullRequest
0 голосов
/ 19 июня 2019

Проблема в том, что когда в historyData огромных данных есть огромные данные, то при увеличении данных они присутствуют только каждую секунду, а не миллисекунды.Поэтому при увеличении масштаба для диаграммы с огромными данными в ее истории отсутствуют данные в миллисекундах.

Чтобы воспроизвести проблему, перейдите по ссылке ниже, а затем через некоторое время, когда в истории присутствуют огромные данные, измените интервалв методе setinterval от 20, скажем до некоторого большого числа 20000, затем масштабирование исторических данных с помощью rangeselector, для исторических данных отображаются только данные секунд, но не данные миллисекунд.

проблема воспроизводится по следующей ссылке: https://jsfiddle.net/nh5ap21m/

Я посетил API-документацию highcharts: https://api.highcharts.com/highcharts/plotOptions.series.pointInterval и попытался внести изменения для pointInterval, pointIntervalUnit, connectNulls, gapSize gapUnit, но все еще не смог найти точное решение.

интервал измененияздесь:

setInterval(function () {
                    var x = (new Date()).getTime(), // current time
                        y = Math.round(Math.random() * 100);
                    series1.addPoint([x, y], true, true);
                }, 20);
                var series2 = this.series[1];
                setInterval(function () {
                    var x = (new Date()).getTime(), // current time
                        y = Math.round(Math.random() * 50);
                    series2.addPoint([x, y], true, true);
                }, 20);

Ожидаемый результат : Ожидаемый результат при увеличении для historyData диаграммы, данные миллисекунд также должны быть нанесены на график.

// Create the chart
Highcharts.stockChart('container', {
    chart: {
        events: {
            load: function () {

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

    time: {
        useUTC: false
    },

    rangeSelector: {
        buttons: [{
            count: 1,
            type: 'minute',
            text: '1M'
        }, {
            count: 5,
            type: 'minute',
            text: '5M'
        }, {
            type: 'all',
            text: 'All'
        }],
        inputEnabled: false,
        selected: 0
    },

    title: {
        text: 'Live random data'
    },

    exporting: {
        enabled: false
    },
legend: {
                enabled: true
            },
plotOptions: {
        series: {
            marker: {
                states: {
                    hover: {
                        enabled: true,
                        animation: {duration: 100},
                        enableMouseTracking: true,
                        stickyTracking: true
                    }
                }
            }
        }
    },

tooltip:{
								shared: true,
                split: false,
  							stickyTracking: true,
                enableMouseTracking: true,
                enabled: true,
                followPointer: true,
                followTouchMove: true,
						    formatter: function(){
                var tooltip = "";
                var phaseNameList = "";
                
                //tooltip += "<b>I-unit "+ "<br/>"+ "x: "+this.x +"</b>";
                tooltip += "<b>I-unit "+ "<br/>"+ "x: "+ new Date(this.x)+
                "</b>";
                tooltip +=  "<br/>"+ "y: "+this.y +"</b>";
                tooltip +=  "<br/>"+ this + "</b>";
                return tooltip;
               }
},

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

            for (i = -999; i <= 0; i += 1) {
                data.push([
                    time + i * 1000,
                    Math.round(Math.random() * 100)
                ]);
            }
            return data;
        }())
    },
    {
    name: 'Random data2',
        data: (function () {
            // generate an array of random data
            var data = [],
                time = (new Date()).getTime(),
                i;

            for (i = -999; i <= 0; i += 1) {
                data.push([
                    time + i * 1000,
                    Math.round(Math.random() * 50)
                ]);
            }
            return data;
        }())
    }]
});
<script src="https://code.highcharts.com/stock/highstock.js"></script>
<script src="https://code.highcharts.com/stock/modules/exporting.js"></script>
<script src="https://code.highcharts.com/stock/modules/export-data.js"></script>

<div id="container" style="height: 400px; min-width: 310px"></div>

1 Ответ

1 голос
/ 19 июня 2019

Разница в том, что ваши исходные данные имеют интервал в одну секунду:

for (i = -999; i <= 0; i += 1) {
    data.push([
        time + i * 1000,    // date every second
        Math.round(Math.random() * 100)
    ]);
}

Динамически добавляемые данные имеют интервал в 20 миллисекунд:

setInterval(function() {
    var x = (new Date()).getTime(), // date every 20 milliseconds
        y = Math.round(Math.random() * 50);
    series2.addPoint([x, y], true, true);
}, 20);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...