2013-03-26 19 views
6

Ho un grafico di highstock con un sacco di dati al suo interno, sono in grado di definire come i dati possono essere raggruppati, ma Id come l'utente per specificare quale gruppo di dati utilizzare e cambiare dinamicamente tra giorno , settimana, mese ecc.Highcharts: Come impostare dataGrouping

Quindi è possibile avere un pulsante in cui un utente può modificare il modo in cui i dati sono raggruppati, in caso affermativo come?

Ci sono molte caratteristiche undocumentated, per esempio currentDataGrouping, ma non c'è nulla per impostare il raggruppamento di dati ... che posso vedere qualsiasi modo ...

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

risposta

2

L'API ha un metodo per aggiornare la serie (http://api.highcharts.com/highcharts#Series.update()). per esempio.

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

Si dovrebbe essere in grado di utilizzare questa chiamata API di modificare gli attributi di serie.

Per esempio, si potrebbe avere due serie di oggetti definiti, e aggiornare il grafico di utilizzare quello che si desidera su un pulsante di scatto:

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

suo un po 'asino sulla faccia di farlo, dovrebbe essere in grado di costringere i quali dataGrouping usare ... – craig1231

+0

Quali sono le opzioni datagrouping che si desidera passare da? – SteveP

+0

Settimana e Mese, possibilmente anche giorno, ma il raggruppamento dei dati è riservato solo alla variazione dell'intervallo. – craig1231

0

abbiamo provato un Hack intorno a questo, dove abbiamo usato Highstock di (Splinechart) RangeSelector, Event e DataGrouping. Al clic del rangeelectorButton settimanale catturiamo questo evento tramite setExtremes. Posta che cattura l'evento lo avvicini a "somma". Se si utilizzano due serie di iterare l'oggetto.

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