2012-03-24 15 views
6

Mam wykres liniowy highstock wyświetlający dzienne i tygodniowe ceny akcji dla danego zasobu. Problem polega na tym, że tablica danych jest wystarczająco duża, aby codzienne punkty danych były "próbkowane" w cotygodniowych punktach danych, a cotygodniowe punkty danych są próbkowane do miesięcznych punktów danych.Grupowanie danych w tygodniowe, miesięczne według użytkownika

Czy istnieje sposób, aby ustawić je przez użytkownika na tygodniowe lub miesięczne w razie potrzeby.

góry dzięki

Odpowiedz

7

Sprawdź o dataGrouping.
Można ustawić tak, aby pobierał próbki w razie potrzeby, np. example.
Albo jeśli chcesz wyłączyć można ustawić go na wartość false, jak mieszka kodu lub here:

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

staraliśmy hack obejść ten problem, gdzie użyliśmy Highstock'S (Splinechart) RangeSelector, event i DataGrouping. Po kliknięciu tygodniowego rangeselectorButton przechwytywamy to wydarzenie przez setExtremes. Post catch to wydarzenie jest zbliżone do "sumy". Jeśli używasz dwóch serii niż iterować obiekt.

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

Można zmienić dataGrouping.units w dowolnym momencie przez każdą serią update() metody:

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

Przykład: http://jsfiddle.net/X5WbN/20/

Powiązane problemy