如何为 HighStock 数据动态调整 dataGrouping 和设置可变时间间隔 (HighCharts)

How to dynamically adjust dataGrouping and set variable time intervals for HighStock data (HighCharts)

我在让 HighStock 使用 dataGrouping 以便它在需要时显示正确的单位时遇到了很多问题,我经常遇到运行时错误。

背景:我正在加载基于新近度的不同粒度的时间序列数据,因此对于小于 8 小时的指标,数据的粒度是每分钟,对于任何长达 14 天的数据,它是按小时,对于超过 14 天的数据,它是每天测量的。我假设可以使用 dataGrouping,但是在显式更改分组时我遇到了很多问题(完整示例请参见 http://jsfiddle.net/xckaxaf2/8/):

chart.series[0].update({ dataGrouping: { units: [ ['minute', [1]] ] } });

我遇到的问题是:

有谁知道如何解决这些问题并根据在极端情况下查看的数据动态设置 dataGrouping 间隔?

我在 https://github.com/highslide-software/highcharts.com/issues/4050

提出了一个问题

作为 solution/workaround,您可以包装负责数据分组的方法,并在那里设置该选项:http://jsfiddle.net/xckaxaf2/9/

(function (H) {
    H.wrap(H.Series.prototype, "processData", function (c) {

        var chart = this.chart,
            dg = this.options.dataGrouping,
            currentUnits = dg.units[0][0],
            min = chart.xAxis[0].min,
            targetUnit = getUnitFromRangeStart(min);


        if (currentUnits !== targetUnit) {
            console.log('Changing interval from ' + currentUnits + ' to ' + targetUnit);
            /* Change grouping for all charts other than the navigator */
            dg.units = [
                [targetUnit, [1]]
            ];
        }
        c.call(this);

    });
})(Highcharts);

只需确保您已将 dataGrouping.forced 选项设置为 true。因此将始终使用 dataGrouping。