在许多 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 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
首先我知道这里的同步表示例: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 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