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/

修复示例:http://jsfiddle.net/p2qvx24a/