2012-03-24 13 views
6

Ich habe ein Highstock-Liniendiagramm, das die täglichen und wöchentlichen Aktienkurse für eine bestimmte Aktie anzeigt. Das Problem ist, wenn das Datenarray groß genug ist, werden die täglichen Datenpunkte in wöchentliche Datenpunkte "abgetastet" und wöchentliche Datenpunkte werden bis zu monatlichen Datenpunkten abgetastet.Datengruppierung nach wöchentlich, monatlich nach Benutzer

Gibt es eine Möglichkeit, sie nach Benutzer auf wöchentlich oder monatlich bei Bedarf einzustellen.

Vielen Dank im Voraus

Antwort

7

prüfen über dataGrouping.
Sie können festlegen, dass es bei Bedarf wie die example Probe abgetastet wird.
Oder wenn Sie wollen deaktivieren können Sie es auf false gesetzt, wie der Code unten oder here:

series: [{ 
    type: 'candlestick', 
    name: 'AAPL', 
    data: arrayOfData, 
    dataGrouping: { 
     enabled: false 
    } 
}] 
-1

Wir haben versucht, einen Hack, um dieses, wo wir Highstock des (Splinechart) verwendet RangeSelector, Veranstaltung und DataGrouping. Beim Klick auf den wöchentlichen rangeselectorButton fangen wir dieses Ereignis durch setExtremes. Nachdem Sie das Ereignis eingefangen haben, nähern Sie es der Summe an. Wenn Sie zwei Serien verwenden, iterieren Sie das Objekt.

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

Sie die dataGrouping.units jederzeit durch jede Reihe update() Verfahren ändern können:

//http://api.highcharts.com/highstock#plotOptions.series.dataGrouping.units 
var unit = 'week'; //'day' 'month' 

//http://api.highcharts.com/highstock#Series.update 
_chart.series.forEach(function(ser) { 
    ser.update({ 
     dataGrouping: { 
      units: [ [unit, [1]] ] 
     } 
    }, false); 
}); 

_chart.redraw(); 

Beispiel: http://jsfiddle.net/X5WbN/20/

Verwandte Themen