在许多 highcharts 图表之间同步最大最小值(实时)

Sync max min between many highcharts charts (in real time)

首先我知道这里的同步表示例: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 将停止计算新的最小值和最大值,这意味着如果我所有图表中的数据开始缩小,最大值将永远不会重新计算,因此图表看起来有点糟糕且难以阅读(想象一下最大值为 10k现在所有图表中的数据都在 1k 左右)。

我有一个关于如何通过从 highcharts 读取我页面上所有图表的 dataMin 和 dataMax 道具然后每隔 X 秒自己计算最小值和最大值来解决它的想法,我的问题是 highcharts有一些有趣的方法可以从 dataMin 和 dataMax 计算最大值和最小值,但我没有找到它的定义位置或如何使用该函数。

例如,如果在 highcharts 中 dataMax 是 16442,那么我相信最大值是 17500,我不确定 highcharts 在那里做的确切逻辑,但我想保持完全相同的行为。

tl;dr
1) 同步不同图表(但单位相同)的最小值和最大值(Y 轴)的最佳方法是什么?
2) 如果我的解决方案是最好的方法,那么我如何使用 dataMax 逻辑中的 highcharts inner setMax?

提前致谢!

看来你用错了地方setExtremes。请看下面我的方法,每次添加点时,图表都有相同的 yAxis minmax

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