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



首先,我知道这里的同步表示例: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左右(。

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

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

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

提前感谢!

看来你在错误的地方使用了setExtremes。请看一下我下面的方法,每次添加点时,图表都具有相同的 yAxisminmax

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

最新更新