Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Highcharts:如何设置数据分组_Javascript_Jquery_Highcharts_Highstock - Fatal编程技术网

Javascript Highcharts:如何设置数据分组

Javascript Highcharts:如何设置数据分组,javascript,jquery,highcharts,highstock,Javascript,Jquery,Highcharts,Highstock,我有一个包含大量数据的highstock图,我可以定义如何对数据进行分组,但我希望用户指定要使用的数据分组,并在日、周、月等之间动态更改 那么,是否有可能有一个按钮,用户可以通过该按钮更改数据的分组方式,如果有,如何更改 有许多未记录的特性,例如currentDataGrouping,但是没有设置数据分组。。。我可以看到任何方式 series: [{ type: 'column', name: title,

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

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

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

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

API有一个更新系列()的方法。e、 g

您应该能够使用此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);

我们尝试了一种破解方法,使用了Highstock(Splinechart)、Event和。单击weekly Range Selector按钮,我们就可以通过它捕获此事件。捕捉事件后,将其近似为“总和”。如果您使用的是两个序列,则迭代对象

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

@

我始终只有一个timeseries,因此这种方法对我很有效(无需手动更新每个timeseries):

之后,很容易更换装置:

self.setCandleInterval = function (pUnit, pInterval) {
    self.myChart.update({
        plotOptions: {
            series: {
                dataGrouping: {
                    units: [
                        [pUnit, [pInterval]]
                    ]
                }
            }
        }
    });
}

这样做的表面上有点愚蠢,应该能够强制使用哪个数据分组…您想要在哪些数据分组选项之间切换?周和月,也可能是天,但数据分组只会随着范围的变化而变化。我可能误解了您的要求,但我认为您可以通过单击按钮来更新系列选项(请参阅更新的答案。实际上,传递变量选项以更新就足够了:
chart.series[0]。更新({dataGrouping:{forced:true,units:[['week',[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]]
                    ]
                }
            }
        }
    });
}