D3数据()与数据()

时间:2015-09-04 10:26:29

标签: javascript d3.js svg

在Mike Bostock的'Towards Reusable Charts'中,为什么与<p>元素的初始数据链接是用数据(数据)进行的:

d3.csv("sp500.csv", function(data) {
  var formatDate = d3.time.format("%b %Y");

  d3.select("#example")
      .datum(data)
    .call(timeSeriesChart()
      .x(function(d) { return formatDate.parse(d.date); })
      .y(function(d) { return +d.price; }));
});

虽然使用数据([data])进一步将数据链接到chart()函数内的<svg>元素:

// Select the svg element, if it exists.
var svg = d3.select(this).selectAll("svg").data([data]);

// Otherwise, create the skeletal chart.
var gEnter = svg.enter().append("svg").append("g");
gEnter.append("path").attr("class", "area");
gEnter.append("path").attr("class", "line");
gEnter.append("g").attr("class", "x axis");

在他自己的answer迈克说,这两种方法是可以互换的,除了前者不计算连接。那么为什么要在这里使用数据([数据]?)

如果注释行建议已经存在<svg>元素,我也不太清楚会发生什么。对我来说,在这种情况下输入选择是空的,没有进一步的追加将起作用...

我一定是误会了......

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

在第二种情况下使用.data([data])的优点是,如果没有SVG,则输入选择的处理会添加它。如果存在SVG,则代码完全等同于.datum(data) - 绑定到元素的数据将被更改,并且不会发生任何其他情况。