2011-11-18 8 views
8

Ho dati basati sul tempo che vanno da 1 a 500. Il tempo viene tracciato sull'asse x ei valori sono sull'asse y.Come impostare un valore minimo statico per gli assi in Highcharts

Quando l'intervallo tra i punti di dati minimi e massimi è elevato, l'etichetta iniziale dell'asse y è 0. Posso dire a Highcharts di non visualizzare l'etichetta impostando yAxis.startOnTick = false; ma non è proprio quello che sto cercando.

Here is a jsfiddle del problema in cui non è possibile stabilire se il primo punto è 0 o qualche altro valore. Avere 0 qui sembra anche che l'intervallo minimo per y è 0, non 1.

Can Highcharts visualizza la prima etichetta e la prima etichetta deve sempre essere impostata sul valore minimo nel set di dati (relativo al proprio asse).

risposta

9

Sono stupito di quanto sia difficile. Non una soluzione ottimale, ma la migliore I can dream up con api di HighChart:

var someData = [1,5,82,9,300,5,42,199,5,6,99,1,56,52,250,64]; 

var chart = new Highcharts.Chart({ 

    chart: { 
     renderTo: 'container' 
    }, 
    yAxis:{ 
     min: -10, 
     tickInterval: 1, 
     labels: { 
      formatter: function() { 
       if (this.value < someData[0]) 
        return null; 
       else if (this.value == someData[0]) 
        return this.value; 
       else if (this.value % 50 == 0) 
        return this.value; 
      } 
     } 
    }, 
    series: [{ 
     data: someData 
    }] 

}); 

enter image description here

+0

+1. Questo è molto meglio di quello che mi è venuto in mente - Stavo solo dicendo ad Highcharts che quando l'etichetta è "0", mostra invece "1". Dovrò eseguire un'ulteriore pre-elaborazione dei dati per far funzionare la soluzione al 100% con i miei dataset, ad esempio impostando l'intervallo di tick appropriato e determinando il valore più basso nel set di dati. Grazie! –

+0

Oh, probabilmente eseguirò un po 'di elaborazione aggiuntiva solo impostando tickInterval su 1 quando Highcharts vorrà impostare la prima etichetta su "0", a meno che non ci sia davvero molto sovraccarico quando si chiamano le etichette. formatter' fino a 500 volte. –

+0

Questo non funziona più, con la versione 4. Sto ancora cercando una soluzione. – Syl

3

Una soluzione (che ottimizza Marks answer) è quello di utilizzare yAxis.labels.formatter con this.isFirst e this.axis.dataMin, in questo modo:

yAxis:{ 
    labels: { 
     formatter: function() { 
      if(this.isFirst) 
       return this.axis.dataMin; 
      return this.value; 
     } 
    } 
} 

Vedere this JSFiddle demo per un esempio.

Il vantaggio di questo è che non c'è bisogno di impostare manualmente tickInterval, che permette di risparmiare un sacco di chiamate al formatter e lascia Highcharts capire dell'etichetta stessa intervalli. Inoltre, utilizza la conoscenza dell'asse del valore minimo dei dati, invece di dover controllare contro un array (che potrebbe essere necessario scorrere per trovare il minimo).

Attenzione che lo yAxis.min deve essere impostato su qualcosa di sensato qui (funziona meglio con 0 e dati positivi). Se l'asse y scende al di sotto del punto di riferimento minimo, la prima etichetta non sarà quella a 0.

Il valore this.axis non era disponibile quando è stata posta questa domanda.

Problemi correlati