2013-05-30 14 views
8

Ho un semplice grafico a barre serie 1 in cui ogni barra ha un valore nominale. Posso tracciare questa multa con le etichette dei dati e gli assi che rappresentano il valore per ogni barra, ma mi piacerebbe che l'etichetta e l'asse dei dati mostrassero la percentuale del totale delle serie mentre il valore nominale è mostrato in un suggerimento al passaggio del mouse (quindi non voglio convertire i dati in percentuali prima del tracciamento).Percentuale di indici elevati del totale per il grafico a barre semplice

Ecco un immagine che mostra quello che sto cercando e dove sono ora:

fiddle

enter image description here

Ecco quello che ho attualmente per le etichette degli assi come la funzione di formattazione:

plotOptions: { 
      bar: { 
       dataLabels: { 
        enabled: true, 
        formatter: function(){ 
         return Highcharts.numberFormat(this.y,0); 
        } 
       } 
      } 
     } 

C'è qualche variabile di funzione formatter che posso utilizzare per ottenere questo risultato? So che è facile farlo su un grafico a torta, ma ritengo che i grafici a barre rappresentino i dati molto meglio.

MODIFICA: Per dirla semplicemente, come ottengo la somma di tutti i punti della serie? Una volta che ho questo è semplice per ottenere la percentuale:

return Highcharts.numberFormat(100 * this.y/this.y.total,0) + "%";

dove this.y.total è la somma della serie.

risposta

22

Dovrete scorrere i dati e ottenere il totale, e quindi utilizzare la funzione di formattazione DATALABEL per ottenere la percentuale.

Esempio qui:

http://jsfiddle.net/JVNjs/319/

formatter:function() { 
    var pcnt = (this.y/dataSum) * 100; 
    return Highcharts.numberFormat(pcnt) + '%'; 
} 

modificare ::

esempio aggiornato con le etichette degli assi:

http://jsfiddle.net/JVNjs/320/

[[EDIT per i commenti

Se si sta tentando di tracciare i valori percentuali di più serie, si presentano vari problemi fondamentali.

Se si calcola la% di due serie di dati differenti e si visualizza il valore% anche se è stato tracciato il valore grezzo, il grafico sarà fuorviante e confuso nella maggior parte dei casi.

Tracciare i dati come valori percentuali direttamente è il modo migliore per andare in quel caso, ed è possibile aggiungere il valore dei dati non elaborati come proprietà extra nell'oggetto punto se si desidera visualizzarli in un suggerimento o altrove (ovvero http://jsfiddle.net/JVNjs/735/)

Se si desidera utilizzare il metodo originale su due serie diverse, è sufficiente creare due variabili diverse da calcolare e verificare il nome della serie nel programma di formattazione per determinare quale somma di dati calcolare.

+0

perfetto, molte grazie – harryg

+0

simpatico suggeritore;) Ha funzionato! –

+0

funzionerà solo per una serie. se ho più serie allora? – TechnoCrat

0

provare this.percentage

E 'abbastanza ben documentato nelle API Highcharts pure.

http://api.highcharts.com/highcharts#plotOptions.series.dataLabels.formatter

EDIT

Dal momento che avresti bisogno per la serie non-stacked, avresti bisogno di ottenere il totale prima di generare il grafico ... La funzione di seguito aggiunge i valori in una sola variabile che puoi usare successivamente nella tua funzione di formattazione.

function arrayTotal(arr) 
{ 
    var total = 0; 
    for (var i = 0, value; value = arr[i]; i++) 
    { 
    total += value; 
    } 
    return total; 
} 
+0

Sfortunatamente non funziona. Come dice nella documentazione 'this.percentage' fornisce solo la percentuale di una porzione di una serie in pila. La mia serie non è impilata, è solo una semplice serie. – harryg

+0

Quindi creare una funzione personalizzata che emetta il totale prima di impostarlo nei diagrammi elevati stessi. Un ciclo "for", aumentando una variabile di "y" ogni volta farebbe il trucco. –

Problemi correlati