1

我正在尝试为我拥有的每个数据点创建元素,并根据当前数据点为每个元素<g>添加几个不同的元素。我试过类似的东西:<text><g>

var g = vis.selectAll("g").data(dd,function(d){ return d.data.name+d.x+d.y+d.s; });

    var gs = g.enter().append("g");         
        g.exit().remove();

    var t = gs.selectAll("text").data(function(d) { console.log(d); return d; });
    t.enter().append("text").attr("x",function(d){ return d.x+d.s/2; })
        .attr("y",function(d){ return d.y+d.s/4; })
        .attr("font-family","Verdana")
        .attr("font-size","9")          
        .attr("text-anchor","middle")
        .text(function(d){ return d.data.name; });      

    t.attr("x",function(d){ return d.x+d.s/2; })
        .attr("y",function(d){ return d.y+d.s/4; })
        .attr("font-family","Verdana")
        .attr("font-size","9")          
        .attr("text-anchor","middle")
        .text(function(d){ return d.data.name; });      

    t.exit().remove();

但我得到的只是一组空<g>元素。我在做一些明显错误的事情吗?

4

1 回答 1

5

嵌套选择假设某种嵌套数据,例如矩阵。您的个人数据元素不是数组,因此第二次调用.data()不会做任何事情。有关更多详细信息,请查看有关嵌套选择的教程。

我不清楚为什么您需要嵌套选择。您正在添加一个text显示数据点名称的元素,因此您不需要第二个(嵌套)选择。然而,修复它的最简单方法(至少在语法上)应该是将每个元素更改dd为单元素数组。

于 2013-01-09T16:51:20.923 回答