Синхронизация макс. Мин между множеством чартов с высоким графиком - PullRequest
0 голосов
/ 21 октября 2018

Прежде всего, я знаю о примере таблиц синхронизации здесь: https://www.highcharts.com/demo/synchronized-charts

Это хорошо, но в моих таблицах ось Y одинакова для всех графиков, единственная проблема заключается в том, что каждые несколькосекунды Я динамически добавляю точку к каждому графику, поэтому я ищу способ иметь одинаковые минимальные и максимальные значения для всех графиков (проще для сравнения).

Я подключился к afterSetExtremes () https://api.highcharts.com/highcharts/yAxis.events.afterSetExtremes
И затем вычислили минимальное значение всех минут и максимальное значение всех максимумов (из всех графиков вместе), и я установил его как новое минимальное и максимальное значения для всех графиков.

Проблема в том,что, как только я использую setExtremes: https://api.highcharts.com/class-reference/Highcharts.Axis#setExtremes
Highcharts прекратит вычислять новые минимумы и максимумы, что означает, что если данные во всех моих графиках начинают сокращаться, максимум не будет пересчитываться когда-либо, поэтому графики будут выглядетьдовольно плохо и трудно читать (представьте, что максимум 10 КБ с данными, которые сейчас составляют около 1 КБ во всех графиках).

У меня есть идея, как решить эту проблему, прочитав dataMin и dataMax prОпс от высоких графиков для всех графиков, которые у меня есть на моей странице, а затем сам вычисляю минимальное и максимальное значения каждые X секунд, моя проблема заключается в том, что у высоких графиков есть какой-то интересный способ вычислить максимальное и минимальное значения из dataMin и dataMax, и я не нашелгде это определено или как я могу использовать эту функцию.

Например, если в старших чартах dataMax равен 16442, то я считаю, что максимальный будет 17500, я не уверен, точная логика, что там работают старшие чарты, но я быхотелось бы сохранять точно такое же поведение.

tl; dr
1) Каков наилучший способ синхронизации min и max (ось Y) для разных графиков (но с одинаковыми единицами измерения)?
2) Если мое решение здесь является лучшим, то как я могу использовать старшие чарты с внутренним setMax из логики dataMax?

Заранее спасибо!

1 Ответ

0 голосов
/ 22 октября 2018

Кажется, вы использовали setExtremes не в том месте.Пожалуйста, посмотрите на мой подход ниже, диаграммы имеют одинаковую yAxis min и max каждый раз, когда вы добавляете точку:

function synchronizeCharts() {
    var charts = Highcharts.charts,
        min, 
        max;

    Highcharts.each(charts, function(chart) {
        min = min ? Math.min(min, chart.yAxis[0].min) : chart.yAxis[0].min;
        max = max ? Math.max(max, chart.yAxis[0].max) : chart.yAxis[0].max;
    });

    Highcharts.each(charts, function(chart){
        if (chart.yAxis[0].min !== min || chart.yAxis[0].max !== max) {
            chart.yAxis[0].setExtremes(min, max);
        }
    });
}

Живая демоверсия: http://jsfiddle.net/BlackLabel/t81Lp20k/

API: https://api.highcharts.com/class-reference/Highcharts.Axis#setExtremes

Если вам все еще нужно узнать, как Highcharts вычисляет экстремумы, вы можете посмотреть исходный код: https://code.highcharts.com/highcharts.src.js

...