2013-08-27 5 views
19

moich danych ma procentach jak, na przykład, [10.1, 3.2, 5.4]d3.js: tickformat - dodanie znaku% bez mnożąc przez 100

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

d3.format("0%") da mi [1010%, 320%, 540%] (mnoży przez 100) W jaki sposób uzyskać ?

nie może dowiedzieć się, gdzie dodanie + „%” do pierwszego przypadku lub wyeliminowania * 100 w drugim

odpowiednie części kodu:

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

i dane przychodzą w ten sposób:

{ 
    "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] 
    ] 
} 

To ostatnie trzy liczby w każdym wierszu są wartościami procentowymi używanymi do wyznaczania zakresów. Chcę, aby oś X była sformatowana w liczbach całkowitych +% w oparciu o wysokie i niskie wartości danych.

Dziękujemy!

+0

Czy możesz napisać nieco więcej interesującego kodu? – tomtomtom

+0

@tomtomtom Dodałem więcej szczegółów z kodu. Zdaję sobie sprawę, że mogłem po prostu zmanipulować danymi dla max i min, aby ominąć to, ale chcę wiedzieć, jak po prostu dodać znak procentu. – rolfsf

+0

var formatPercent = funkcja (d) {return d3.format ("0f") + "%"} może może załatwić sprawę, ale nie jestem pewien – tomtomtom

Odpowiedz

37

Aktualizacja dla D3 v4 (używając ES6):

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

oryginalny odpowiedź dla D3 v3:

Można utworzyć własny format:

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

Jeśli chcesz pozbyć się miejsc dziesiętnych:

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