@ davenewtonさんのコメントです。単純な答えは、d3.line
が配列を必要とするということです。配列の配列を.data
に渡すことで、d3
のデータバインディングは配列の配列の最初の配列で.attr
を呼び出します。
このコードを調べます。私たちは通常、データバインディングを使用し、それはenter
を満たしていないので、これはデータバインディングの奇妙な使用である
<!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>
update
、exit
(それでは、の最初の繰り返しというバインディングが呼び出されただけです)。
最後に、このコードのように書くことができることに留意されたい。
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))
はすべて同じです。
配列の配列が必要だと思います。 –