Highcharts:如何设置dataGrouping

时间:2013-03-26 10:06:33

标签: javascript jquery highcharts highstock

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

那么有可能有一个按钮,用户可以根据这个按钮更改数据的分组方式,如果是这样的话?

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

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

3 个答案:

答案 0 :(得分:2)

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

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);

答案 1 :(得分:0)

我们尝试了围绕此问题,我们使用Highstock' s(Splinechart)RangeSelector,事件和DataGrouping。点击每周rangeselectorButton,我们通过setExtremes捕获此事件。发布事件后,将其近似为" sum"。如果你使用两个系列而不是迭代对象。

  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]];
                     });
                 }
             }
         }
     },

@ fiddle

答案 2 :(得分:0)

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

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]]
                    ]
                }
            }
        }
    });
}