Highstock列范围数据分组值不一致

时间:2017-01-15 00:26:07

标签: javascript highcharts highstock

启用了dataGrouping的highstock列范围似乎无法正确计算dataAggregation。

更改范围时,聚合值似乎会发生变化。 如果向右滚动更多,2014年3月将显示不同的值。 issue highlighted

代码和jsfiddle:

dataGrouping: {
          enabled: true,
          approximation: function() {
            const indices = _.range(this.dataGroupInfo.start, this.dataGroupInfo.start + this.dataGroupInfo.length);
            const low = _.min(indices.map(i => this.options.data[i][1]));
            const high = _.max(indices.map(i => this.options.data[i][2]));

            return [low, high];
          },
          groupPixelWidth: 50
        }

请参阅jsfiddle

1 个答案:

答案 0 :(得分:2)

仅当导航器没有从开始启动时才更改列 - 这是因为您定义了近似回调的方式。

dataGroupInfo包含根据图表中可见点(落入x轴范围,裁剪点)的信息,而不是所有点 - 因此要获得初始数据的正确索引,您需要添加{ {1}} - 它是可以看到点的索引。

this.cropStart

示例:https://jsfiddle.net/12o4e84v/7/

可以更轻松地实现相同的功能

approximation: function() {
                const start = this.cropStart + this.dataGroupInfo.start;
                const stop = start + this.dataGroupInfo.length;

                const indices = _.range(start, stop);
                const low = _.min(indices.map(i => this.options.data[i][1]));
                const high = _.max(indices.map(i => this.options.data[i][2]));

                return [ low, high ];
              },

示例:https://jsfiddle.net/12o4e84v/8/

甚至更简单:

approximation: function(low, high) {
    return [ _.min(low), _.max(high) ];
}

但是,默认情况下,列的近似值设置为approximation: 'range', ,因此您无需手动执行此操作。

示例:https://jsfiddle.net/12o4e84v/9/