2013-08-27 33 views
19

dữ liệu của tôi có phần trăm như, ví dụ, [10.1, 3.2, 5.4]d3.js: tickformat - thêm một dấu% mà không cần nhân với 100

d3.format("0f") sẽ cho tôi [10, 3, 5]

d3.format("0%") sẽ cho tôi [1010%, 320%, 540%] (nhân lên bởi 100)

làm cách nào để nhận được [10%, 3%, 5%]?

tôi không thể tìm ra nơi để thêm một + "%" vào trường hợp đầu tiên hoặc loại bỏ * 100 trong trường hợp thứ hai

các bộ phận liên quan của mã:

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

và dữ liệu có dạng như sau:

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

Đây là ba số cuối trong mỗi dòng là giá trị phần trăm tôi đang sử dụng cho phạm vi biểu đồ. Tôi muốn trục x được định dạng ở dạng số nguyên +% dựa trên giá trị cao và thấp trong dữ liệu.

Cảm ơn bạn!

+0

bạn có thể đăng thêm một chút mã quan tâm không? – tomtomtom

+0

@tomtomtom Tôi đã thêm các chi tiết khác từ mã. Tôi nhận ra tôi có thể chỉ cần thao tác dữ liệu cho tối đa và min để có được xung quanh này, nhưng tôi muốn biết làm thế nào để chỉ cần thêm một dấu phần trăm. – rolfsf

+0

var formatPercent = function (d) {return d3.format ("0f") + "%"} có thể làm thủ thuật, nhưng tôi không chắc chắn – tomtomtom

Trả lời

37

Cập nhật cho v4 D3 (sử dụng ES6):

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

câu trả lời gốc cho D3 v3:

Bạn có thể tạo định dạng của riêng bạn:

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

Nếu bạn muốn loại bỏ các chữ số thập phân:

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