Highstock 自定义最小最大近似值仅在某些范围内正常工作
Highstock custom min max approximation works properly only at some ranges
我正在用来自 mysql 的数据提供 highstock 图表。每分钟都会存储一些变量,因此如果您想查看过去 3 个月的数据,它们会被分组。 Highstock 的默认近似函数仅给出低、高、平均、总和值。我的最小值和最大值对我来说最重要,所以我制作了自己的近似函数,即:
approximation: function (arr) {
// first time or point precalculated
if ( !gInfo || gInfo.nextPoint) {
// first time return first value (arr[0])
var point = gInfo ? gInfo.nextPoint : arr[0];
// save current data to the next iteration
gInfo = {prev : arr, nextPoint : null};
return point;
} else {
var prev = gInfo.prev,
// concat current group with the previous one
data = prev.concat(arr),
// get min, max and their positions
min = Math.min.apply(null, data),
max = Math.max.apply(null, data),
minIdx = data.indexOf(min),
maxIdx = data.indexOf(max),
// order min and max
aprox = minIdx < maxIdx ? [min, max] : [max, min];
// save next aproximation and return current
gInfo.nextPoint = aprox[1];
return aprox[0];
}
},
其实我没有做到,但我在论坛里找到了。
问题是它只在某些范围内给出正确的结果,如下图所示:
最大范围内的第一张照片 - 不正常:
Max range - you can't see every min value
当我将范围更改为更小时,我可以看到每个最小值:
This is how it should looke like at max range
当我放大时也会发生这种情况,因此数据以两分钟的间隔分组,我只是向左或向右滚动。
起初我认为这与通过将 groupPixelWidth:
更改为任何值没有帮助的组的方式有关。
最小值或最大值对我来说真的很重要,这是我可以在 highstock 中解决的问题。
近似函数似乎有错误。
在第 3 行:
if ( !gInfo || gInfo.nextPoint) {
if
如果 !gInfo 为假(在第一次之后)且 gInfo.nextPoint returns 为假,则 return 应计算为假,但它不会 return 假仅当它为 null(在函数中设置)时,而且当它为零时。将 if
条件更改为:
if (!gInfo || gInfo.nextPoint !== null) {
错误示例(修复前):http://jsfiddle.net/p2qvx24a/1/
我正在用来自 mysql 的数据提供 highstock 图表。每分钟都会存储一些变量,因此如果您想查看过去 3 个月的数据,它们会被分组。 Highstock 的默认近似函数仅给出低、高、平均、总和值。我的最小值和最大值对我来说最重要,所以我制作了自己的近似函数,即:
approximation: function (arr) {
// first time or point precalculated
if ( !gInfo || gInfo.nextPoint) {
// first time return first value (arr[0])
var point = gInfo ? gInfo.nextPoint : arr[0];
// save current data to the next iteration
gInfo = {prev : arr, nextPoint : null};
return point;
} else {
var prev = gInfo.prev,
// concat current group with the previous one
data = prev.concat(arr),
// get min, max and their positions
min = Math.min.apply(null, data),
max = Math.max.apply(null, data),
minIdx = data.indexOf(min),
maxIdx = data.indexOf(max),
// order min and max
aprox = minIdx < maxIdx ? [min, max] : [max, min];
// save next aproximation and return current
gInfo.nextPoint = aprox[1];
return aprox[0];
}
},
其实我没有做到,但我在论坛里找到了。
问题是它只在某些范围内给出正确的结果,如下图所示:
最大范围内的第一张照片 - 不正常: Max range - you can't see every min value
当我将范围更改为更小时,我可以看到每个最小值: This is how it should looke like at max range
当我放大时也会发生这种情况,因此数据以两分钟的间隔分组,我只是向左或向右滚动。
起初我认为这与通过将 groupPixelWidth:
更改为任何值没有帮助的组的方式有关。
最小值或最大值对我来说真的很重要,这是我可以在 highstock 中解决的问题。
近似函数似乎有错误。 在第 3 行:
if ( !gInfo || gInfo.nextPoint) {
if
如果 !gInfo 为假(在第一次之后)且 gInfo.nextPoint returns 为假,则 return 应计算为假,但它不会 return 假仅当它为 null(在函数中设置)时,而且当它为零时。将 if
条件更改为:
if (!gInfo || gInfo.nextPoint !== null) {
错误示例(修复前):http://jsfiddle.net/p2qvx24a/1/