2013-08-27 22 views
19

我的数据乘以具有百分比,例如,[10.1, 3.2, 5.4]d3.js:tickformat - 添加%符号,而不通过100个

d3.format("0f")会给我[10, 3, 5]

d3.format("0%")会(乘以100)给我[1010%, 320%, 540%]

我该如何获得[10%, 3%, 5%]

我不能找出在何处在第二种情况下添加一个+“%”到第一壳体 或消除* 100

代码的相关部分:

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

并且数据如下所示:

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

这是每行最后三个数字,即我用于绘制范围的百分比值。我想根据数据中的高低值将x轴格式化为整数+%格式。

谢谢!

+0

可以请你多发一点感兴趣的代码吗? – tomtomtom

+0

@tomtomtom我已经添加了代码的更多细节。我意识到我可能只是操纵max&min的数据来解决这个问题,但我确实想知道如何简单地添加一个百分号。 – rolfsf

+0

var formatPercent = function(d){return d3.format(“0f”)+“%”} 也许可以做到这一点,但我并不确定 – tomtomtom

回答

37

(选用ES6)D3 V4更新:

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

为D3 V3 原来的答复:

您可以创建自己的格式:

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

如果您想摆脱小数位:

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