@ 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))
都是等價的。
我猜是因爲它期望一個數組數組。 –