selection.data

selection.data([values[, key]])   //在计算相关的连接时,取得或设置一组元素的数据。

连接指定的一组数据的和当前选择。指定的values是一组数据值(例如,数字或对象)或一个函数返回一组值。如果没有指定key函数,则values的第一数据被分配到当前选择中第一元素,第二数据分配给当前选择的第二个元素,依此类推。当数据被分配给一个元素,它被存储在属性data中,从而使数据“沾粘”,从而使数据可以再选择。

data操作的结果是update选择;这表示选择的DOM元素已成功绑定到指定的数据元素。update选择还包含对enter和exit的选择,对应于添加和删除数据节点。有关详细信息,请参阅简短的教程关于连接的思考

key函数可以被指定为控制数据是如何连接元素。这取代默认的by-index行为;key函数被新数据数组中的每个元素调用一次,并再次用于选择中的每个元素。在这两种情况下的key函数是通过传递数据d与索引i。当key 函数上被新的数据元素评价时,this上下文是数据数组;当key 函数被现有选择评估时,this上下文是相关的DOM元素。key函数,基于先前结合的数据返回一个用于连接数据和相关的元素的字符串。例如,如果每个数据都有一个唯一的字段name,该连接可以被指定为.data(data, function(d) { return d.name; })。如果指定了key函数,data操作符也影响节点的索引;该索引被作为第二个参数i作为任何运算符函数的参数。然而,请注意,现有的DOM元素不自动重新排序;根据需要使用sort或order函数。有关key函数如何影响数据连接的更详细的示例,请参阅教程条形图2

这个values选择中的每组数据。因此,如果选择具有多个组(例如,一个d3.selectAll后跟一个selection.selectAll)),然后data应该被指定为一个函数,该函数返回一个数组(假设你对每个组想要不同的数据)。该函数将被传递的当前组数据(或undefined)和索引,组的this上下文。 例如,可以将一个二维数组和初始选择绑定,然后将包含的内部数组和每个子选择绑定。在这种情况下,values函数是标识函数:它被每个组中的子元素调用,被传递绑定到父元素的数据,并且返回这个数据数组。

eg:

var data = [
  [11975,  5871, 8916, 2868],
  [ 1951, 10048, 2060, 6171],
  [ 8010, 16145, 8090, 8045],
  [ 1013,   990,  940, 6907]
];
var tr = d3.select("body").append("table").selectAll("tr")
          .data(matrix)
          .enter().append("tr");

var td = tr.selectAll("td")
      .data(function(d) { return d; })
      .enter().append("td")
      .text(function(d) { return d; });


 eg2:
 var data=[10,15,30,45,43,45];
    var colors = ["#9467bd","#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"];
    var pie=d3.layout.pie();
    var width=500,
        height=500;
    var outerRadius=width/2;  
    var innerRadius=150;//内半径

    var arc=d3.svg.arc()
            .innerRadius(innerRadius)
            .outerRadius(outerRadius)
    var svg=d3.select("body")
        .append("svg")
        .attr("width",width)
        .attr("height",height)

    var arcs=svg.selectAll("g")
        .data(pie(data))
        .enter().append("g")
        .attr("class","arc")
        .attr("transform","translate("+outerRadius+","+outerRadius+")");

    arcs.append("path")
        .attr("fill",function(d,i){
            return colors[i];
        })
        .attr("d",arc);

    arcs.append("text")
    .attr("transform",function(d){
    return "translate("+arc.centroid(d)+")";   //定位文字到图形的中心
    })
    .attr("text-anchor","middle")    //文字居中
    .attr("fill","#fff")
    .attr("font-size","24px")
    .text(function(d){
    return d.value;
    })

results matching ""

    No results matching ""