2013-08-27 17 views
19

miei dati ha percentuali come, ad esempio, [10.1, 3.2, 5.4]d3.js: tickformat - aggiungendo un segno% senza moltiplicando per 100

d3.format("0f") mi darà [10, 3, 5]

d3.format("0%") mi darà [1010%, 320%, 540%] (moltiplica per 100)

come ottengo [10%, 3%, 5%]?

non riesco a capire dove aggiungere un + "%" per il primo caso o eliminare l'* 100 nel secondo caso

le corrispondenti parti del codice:

var formatPercent = d3.format("0f"); 

var min = 0; 
var max = d3.max(data, function(d) { return + d[5]; }); 
max = Math.round(max * 1.2); // pad it 

//define the x-axis 
var xAxis = d3.svg.axis() 
       .scale(x) 
       .orient('top') 
       .ticks(6) 
       .tickFormat(formatPercent); 

e dei dati viene in questo modo:

{ 
    "Geography": [ 
    ["Midwest", 234017797, 498, 8.2, 9.0, 11.3], 
    ["Northeast", 265972035, 566, 8.9, 12.1, 13.1], 
    ["South", 246235593, 524, 8.1, 8.3, 10.8], 
    ["West", 362774577, 772, 9.4,9.9, 11.7] 
    ] 
} 

sono gli ultimi tre numeri in ogni riga che sono i valori percentuali che sto usando per tracciare le gamme. Voglio che l'asse x sia formattato in formato intero +% in base ai valori alti e bassi nei dati.

Grazie!

+0

puoi postare un po 'di più del codice interessato? – tomtomtom

+0

@tomtomtom Ho aggiunto ulteriori dettagli dal codice. Mi rendo conto che probabilmente potrei semplicemente manipolare i dati per max & min per aggirare questo problema, ma voglio sapere come aggiungere semplicemente un segno di percentuale. – rolfsf

+0

var formatPercent = function (d) {return d3.format ("0f") + "%"} forse può fare il trucco, ma non sono così sicuro – tomtomtom

risposta

37

Aggiornamento per v4 D3 (utilizzando ES6):

// Can also be axisTop, axisRight, or axisBottom 
d3.axisLeft() 
    .tickFormat(d => d + "%") 

risposta originale per la D3 v3:

è possibile creare il proprio formato:

d3.svg.axis() 
    .tickFormat(function(d) { return d + "%"; }); 

Se desidera eliminare le cifre decimali:

d3.svg.axis() 
    .tickFormat(function(d) { return parseInt(d, 10) + "%"; });