如何为 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]] ] } });
我遇到的问题是:
- 如果我指定 say 单位的数据分组:[['minute', [1]], ['hour', [1]], ['month', [1]] ],我无法控制何时使用每种类型的分组。这是一个问题,因为如果将极值设置为 1 分钟间隔 8 小时数据之前的时间,并且它使用分钟,则数据不完整,同样默认情况下,分组在小于一小时时不正确。我需要一些明确的方法来设置分组。
- 如果我以编程方式更改数据分组,我会收到两个错误:Uncaught TypeError: object is not a function(index):83, Highcharts.StockChart.chart.events.redraw 和 Uncaught TypeError: Cannot read 属性 'length' 未定义,jquery-1.9.1.js:747 jQuery.extend.grephighstock.js:259。您可以通过单击 24h 或 1m 在上面的 JSFiddle 中轻松看到此错误。
有谁知道如何解决这些问题并根据在极端情况下查看的数据动态设置 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。
我在让 HighStock 使用 dataGrouping 以便它在需要时显示正确的单位时遇到了很多问题,我经常遇到运行时错误。
背景:我正在加载基于新近度的不同粒度的时间序列数据,因此对于小于 8 小时的指标,数据的粒度是每分钟,对于任何长达 14 天的数据,它是按小时,对于超过 14 天的数据,它是每天测量的。我假设可以使用 dataGrouping,但是在显式更改分组时我遇到了很多问题(完整示例请参见 http://jsfiddle.net/xckaxaf2/8/):
chart.series[0].update({ dataGrouping: { units: [ ['minute', [1]] ] } });
我遇到的问题是:
- 如果我指定 say 单位的数据分组:[['minute', [1]], ['hour', [1]], ['month', [1]] ],我无法控制何时使用每种类型的分组。这是一个问题,因为如果将极值设置为 1 分钟间隔 8 小时数据之前的时间,并且它使用分钟,则数据不完整,同样默认情况下,分组在小于一小时时不正确。我需要一些明确的方法来设置分组。
- 如果我以编程方式更改数据分组,我会收到两个错误:Uncaught TypeError: object is not a function(index):83, Highcharts.StockChart.chart.events.redraw 和 Uncaught TypeError: Cannot read 属性 'length' 未定义,jquery-1.9.1.js:747 jQuery.extend.grephighstock.js:259。您可以通过单击 24h 或 1m 在上面的 JSFiddle 中轻松看到此错误。
有谁知道如何解决这些问题并根据在极端情况下查看的数据动态设置 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。