2012-04-16 11 views
6

Nei grafici a linee HighChart, i dati della serie vengono alimentati dinamicamente dall'applicazione Ruby on Rails. A volte i valori della serie sono zeri o meno, che è un problema per Highcharts e getta la seguente eccezione:Grafici elevati: il modo migliore per gestire e visualizzare valori zero (o negativi) in una serie di grafici lineari con asse Y logaritmico

Highcharts Error #10 
Can't plot zero or subzero values on a logarithmic axis 

Così come un work-around, ho elaborare la mia serie rubino per sostituire condizionale uno zero di minor valore con una numero positivo insignificante, .eg 0.00001 come mostrato di seguito:

oil_vol_array = d_array[1].map { |e| (e < 0.0001) ? 0.0001 : e.round(3) } 

impedisce alla all'eccezione generata, ma il display mostra il grafico partendo 0,0001 se il valore iniziale è zero (comprensibilmente così, poiché ho chiesto di). Un display più desiderabile sarebbe quello di iniziare il grafico a zero, ma HighChart non piace :(

C'è un modo che questo può essere raggiunto?

risposta

9

Hai provato a usare un label formatter?

var chart = new Highcharts.Chart({ 
    yAxis: {   
     labels: { 
      formatter: function() { 
       if(this.value === 0.00001){ 
        return 0; 
       } else { 
        return this.value; 
       } 
      } 
     } 
    } 
}); 
+0

Grazie. Non lo sapevo. Questo è il mio secondo giorno con HighCharts :) – Bharat

1

Quando si ha a che fare con numeri enormi, è meglio usare il formattatore di etichette standard per valori diversi da 0, altrimenti le etichette verranno visualizzate in questo modo: 1000000000 ... Per cambiare questo sostituisci l'istruzione 'else' alla chiamata al metodo di formattazione etichetta originale qui sotto:

var chart = new Highcharts.Chart({ 
    yAxis: {   
     labels: { 
      formatter: function() { 
       if(this.value === 0.00001){ 
        return 0; 
       } else { 
        return Highcharts.Axis.prototype.defaultLabelFormatter.call(this); 
       } 
      } 
     } 
    } 
});