@ davenewton的留言已关闭。简单的回答是,d3.line
需要一个数组。通过传递一组数组到.data
d3
的数据绑定将调用.attr
与数组阵列中的第一个数组。
检查此代码:
<!DOCTYPE html>
<html>
<head>
<script data-require="[email protected]" data-semver="4.0.0" src="https://d3js.org/d3.v4.min.js"></script>
</head>
<body>
<script>
d3.select('body')
.append('div')
.data([1,2,3])
.attr('d', function(d, i){
console.log(d, i);
});
</script>
</body>
</html>
这是一个奇怪的使用数据绑定,因为它不符合enter
,update
,exit
我们通常使用数据绑定(这就是为什么只有绑定get的第一次迭代调用)。
最后,应该指出的是,这个代码可以写成:
var path = svg.append("path")
.datum(points)
.attr("d", d3.svg.line()
.tension(0) // Catmull–Rom
.interpolate("cardinal-closed"));
甚至:
var path = svg.append("path")
.attr("d", d3.svg.line()
.tension(0) // Catmull–Rom
.interpolate("cardinal-closed")(points));
由于:
.append("path")
.data([array])
.attr("d", line)
和
.append("path")
.datum(array)
.attr("d", line)
和
.append("path")
.attr("d", line(points))
都是等价的。
我猜是因为它期望一个数组数组。 –