2014-08-29 124 views
3

根据highcharts范围选择器的值,我想更改数据分组。在我的柱形图中,如果选择了一周,应该有7个栏,如果选择了一天,则应该有24个栏,如果选择了一个月,那么每个月的每一天应该有一个栏。根据范围选择器调整Highcharts数据分组

似乎没有任何方法可以在Highchart配置中提供一个函数来完成此操作,但我可能会遗漏一些东西。

我目前的计划是处理范围选择器上的单击事件,以更新系列数据以包含正确数量的点。但可能有更好的办法。

感谢

回答

3

当然有一堆options available in highstock for data grouping

你应该看的主要是units。在这里您可以指定允许哪种组。

顶部带有groupPixelWidth,你有你所需要的,这个宽度定义了图表中一个点的点数是多少,如果图表上的点数越多,每点的宽度越小,一旦它下降这个高门槛阈值会强制分组。保持这个大小足以强制下一个级别的分组,因为你在屏幕上不要超过30个点。

dataGrouping: { 
    units: [ 
     ['hour', [1]], 
     ['day', [1]], 
     ['month', [1]], 
     ['year', null] 
    ], 
    groupPixelWidth: 100 
} 

@jsFiddle

0

我们试图解决这个黑客攻击,在这里我们使用Highstock的(Splinechart)RangeSelector,事件和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]]; 
        }); 
       } 
      } 
     } 
    }, 

@fiddle