D3.js scale.linear()正在返回NaN

D3.js scale.linear()正在返回NaN,d3.js,D3.js,我正在运行一个简单的条形图,使用d3.scale.linear()并对本例的域范围进行硬编码 我可以在firebug中看到,当将宽度属性应用于我的div时,w_条似乎是NaN 为什么呢 var w_bar = d3.scale.linear() .domain([0, 107525233]) //harcoded .range(["0px", "290px"]); var theList = d3.select("#list").selectAll("div") .da

我正在运行一个简单的条形图,使用d3.scale.linear()并对本例的域范围进行硬编码

我可以在firebug中看到,当将宽度属性应用于我的div时,w_条似乎是NaN

为什么呢

var w_bar = d3.scale.linear()
    .domain([0, 107525233]) //harcoded
    .range(["0px", "290px"]);

var theList = d3.select("#list").selectAll("div")
    .data(myJSON);

theList.enter().append("div")
    .text(function (d) { return d.v; })
    .transition()
    .duration(1000)
    .attr("width", w_bar); // Why NaN?

theList.exit()
    .remove();
以下是JSFIDLE:

您需要使用一个函数来告诉d3您希望如何与数据交互以缩放以创建阵列:

.attr("width", function(d){ return w_bar(d.v); })

这将从构成
myJSON
数组的对象中获取所有
v
属性,用
w_bar
缩放它们,并将它们对应的矩形的宽度设置为该值

嗯,
w\u bar
不是一个数字,
width
属性需要是一个数字。因此,楠

如果希望根据
myJSON
对象中的
v
属性来缩放
width
属性,您应该说
.attr(“宽度”,函数(d){返回w_条(d.v)})

这就是标尺在
d3
中的工作方式,它们是一个函数,它接受一个参数(标尺的
域中的某个值)并返回转换后的值,以适应标尺的
范围

更新的JSFIDLE