我正在使用d3.js图表来绘制y轴和x轴..它的工作正常...但y轴上的值你可以说范围是0到10000我希望如果数字大于千它会来用K表示如果数字是1000,它将显示1K,对于15000,它将在y轴上显示15K
该怎么做..我无法为字符串值制作y.domain和range函数...
var y = d3.scale.linear().range([ height, 0 ]);
y.domain([0,
//d3.min(cities, function(c) { return d3.min(c.values, function(v) { return v.count; }); }),
d3.max(cities, function(c) { return d3.max(c.values, function(v) { return v.count; }); })
]);
Run Code Online (Sandbox Code Playgroud)
怎么做才有办法......请帮助
rob*_*les 35
从API参考,我们看到d3.formatPrefix
var prefix = d3.formatPrefix(1.21e9);
console.log(prefix.symbol); // "G"
console.log(prefix.scale(1.21e9)); // 1.21
Run Code Online (Sandbox Code Playgroud)
我们可以这样使用它
var yAxis = d3.svg.axis()
.scale(y)
.ticks(5)
.tickFormat(function (d) {
var prefix = d3.formatPrefix(d);
return prefix.scale(d) + prefix.symbol;
})
.orient("left");
Run Code Online (Sandbox Code Playgroud)
但是,如果这正是您的意思,我们可以简化使用 d3.format("s")
var yAxis = d3.svg.axis()
.scale(y)
.ticks(5)
.tickFormat(d3.format("s"))
.orient("left");
Run Code Online (Sandbox Code Playgroud)
您正在寻找tickFormat轴对象.
var svgContainer = d3.select("body").append("svg")
.attr("width", 800)
.attr("height", 100);
//Create the Scale we will use for the Axis
var axisScale = d3.scale.linear()
.domain([0, 2000])
.range([0, 600]);
//Create the Axis
var xAxis = d3.svg.axis()
.scale(axisScale)
.tickFormat(function (d) {
if ((d / 1000) >= 1) {
d = d / 1000 + "K";
}
return d;
});
var xAxisGroup = svgContainer.append("g")
.call(xAxis);
Run Code Online (Sandbox Code Playgroud)
在这里查看:http://jsfiddle.net/3CmV6/2/
这将给你你想要的,但我建议检查robermorales的建议使用d3.format('s').
这就是我实现的
var yAxis = d3.svg.axis().scale(y).ticks(5).
tickFormat(function (d) {
var array = ['','k','M','G','T','P'];
var i=0;
while (d > 1000)
{
i++;
d = d/1000;
}
d = d+' '+array[i];
return d;}).
orient("left");
Run Code Online (Sandbox Code Playgroud)
它将工作超过一千...
| 归档时间: |
|
| 查看次数: |
14144 次 |
| 最近记录: |