7

我有一个包含大量数据的 highstock 图表,我能够定义如何对数据进行分组,但我希望用户指定要使用的数据分组并在日、周、月等之间动态更改。

那么是否有可能有一个按钮,用户可以通过该按钮更改数据的分组方式,如果可以的话如何?

有许多未记录的功能,例如 currentDataGrouping,但没有什么可以设置数据分组......我可以看到任何方式......

series: [{
                type: 'column',
                name: title,
                data: data,
                dataGrouping: {
                    units: [['week', [1]], ['month', [1]]]
                }
        }]
4

3 回答 3

4

API 有一种更新系列的方法(http://api.highcharts.com/highcharts#Series.update())。例如

chart.series[0].update({ type: 'spline' });

您应该能够使用此 API 调用来修改任何系列属性。

例如,您可以定义两个系列对象,并在单击按钮时更新图表以使用您想要的对象:

var seriesWeek = {
            type: 'column',
            name: title,
            data: data,
            dataGrouping: {
                units: [ ['week', [1] ] ]
            }
    }

var seriesMonth = {
            type: 'column',
            name: title,
            data: data,
            dataGrouping: {
                units: [ ['month', [1] ] ]
            }
    }

chart.series[0].update(seriesWeek);
于 2013-03-26T10:13:20.607 回答
1

我总是只有一个时间序列,所以这种方法对我有用(无需手动更新每个时间序列):

self.myChart = new window.Highcharts.stockChart(pChartDivContainer, {
        title: {
            text: 'My title'
        },
        rangeSelector: {
            enabled: true
        },
        plotOptions: {
            series: {

                dataGrouping: {
                    approximation: 'ohlc',
                    units: [
                        ["minute", [1]]
                    ],
                    forced: true,
                    enabled: true,
                    groupAll: true
                }

            }
        }
    }, function (chart) {
        self.onChartReady();
    });

之后很容易改变单位:

self.setCandleInterval = function (pUnit, pInterval) {
    self.myChart.update({
        plotOptions: {
            series: {
                dataGrouping: {
                    units: [
                        [pUnit, [pInterval]]
                    ]
                }
            }
        }
    });
}
于 2018-08-19T16:06:25.103 回答
0

我们围绕这个尝试了一个 Hack,我们使用了 Highstock 的(Splinechart)RangeSelector、 Event 和DataGrouping。单击每周 rangeselectorButton 时,我们通过setExtremes捕获此事件。捕获事件后将其近似为“总和”。如果您使用两个系列而不是迭代对象。

  events: {
         setExtremes: function (e) {
             if (e.rangeSelectorButton != undefined) {
                 var triger = e.rangeSelectorButton;
                 if (triger.type == 'week') {
                     $.each(this.series, function (index, obj) {
                         obj.options.dataGrouping.units[0] = ['week', [1]];
                     });
                 } else if (triger.type == 'day') {
                     $.each(this.series, function (index, obj) {
                         obj.options.dataGrouping.units[0] = ['day', [1]];
                     });
                 }
             }
         }
     },

@小提琴

于 2015-04-10T08:01:24.623 回答