2012-03-24 10 views
6

Tengo un gráfico de líneas de gran cantidad que muestra los precios de las acciones diarias y semanales para una acción determinada. El problema es que cuando la matriz de datos es lo suficientemente grande, los puntos de datos diarios se "muestrean" en puntos de datos semanales y los puntos de datos semanales se muestrean en puntos de datos mensuales.Agrupación de datos en semanal, mensual por usuario

¿Hay alguna manera de configurarlas por usuario a la semana o mensualmente cuando sea necesario.

Gracias de antemano

Respuesta

7

comprobar sobre dataGrouping.
Puede configurarlo para obtener muestras cuando sea necesario, como example.
O si quieres desactivar se puede establecer en false, como el bramido código o here:

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

Probamos una Hack alrededor de este, donde se utilizó de Highstock (Splinechart) RangeSelector, Evento y DataGrouping. Al hacer clic en rangeselectorButton semanal detectamos este evento a través del setExtremes. Publicar la captura del evento se aproxima a "suma". Si está utilizando dos series, no itere el objeto.

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

Puede cambiar el dataGrouping.units en cualquier momento a través de cada serie update() método:

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

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

Cuestiones relacionadas