D3数据()对数据()

问题描述:

在麦克博斯托克的“Towards Reusable Charts”为什么<p>元件的初始数据链路与基准制成(数据):D3数据()对数据()

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; })); 
}); 

而数据的进一步链接到<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>元素作为注释行的建议,我不会得到什么结果。对我来说,进入选择在这种情况下空,没有进一步的追加将工作...

我一定是误解的东西...

感谢您的帮助!

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