D3js过滤器选择

swe*_*edo 4 javascript filtering d3.js circle-pack

我创建交互式气泡图财富500点的数据.我试图减少选择,但无法弄清楚为什么它不像我期望的那样工作.

var bubble = d3.layout.pack()
    ...

d3.json("js/data/fortune2009.json", function(json) {

    var node = svg.data([json]).selectAll("g.node")
        .data(bubble.nodes); // filter here?

    node.enter()
        .append("g")
        .attr("class", "node")
        .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });

    node.append("circle")
        .attr("r", function(d) { return d.r; })
        .attr("class", function(d) { return "q" + color(d.Profit) + "-9"; });

    node.filter(function(d) { return !d.children; })
        .append("text")
        .attr("dy", ".3em")
        .style("text-anchor", "middle")
        .text(function(d) { return d.Company.substring(0, d.r / 3); });
});
Run Code Online (Sandbox Code Playgroud)

JSON数据如下所示:

{
    "children":[
    {
        "Year" : "2009",
        "Rank" : "1",
        "Revenue" : "442",
        "Profit" : "851.00",
        "Company" : "Exxon Mobil"
    },
    ....
}
Run Code Online (Sandbox Code Playgroud)

我想删除父节点.我试图使用像这里描述的过滤功能.

.filter(function(d) { return !d.children; })
Run Code Online (Sandbox Code Playgroud)

但是,如果我添加我的过滤器功能,我初始化node选择,或者没有任何反应或我得到一个错误.

(在我附加文本之前应用它时,过滤器有效)

我该如何解决这个问题?

更新:这是一个JSFIDDLE http://jsfiddle.net/B9w4N/8/显示我的问题.

在此输入图像描述

Ric*_*arr 5

你有正确的想法.您只需要在创建圆圈的位置应用过滤器(除了创建文本的位置):

node
    .filter(function(d) { return !d.children; })
    .append("circle")
    .attr("r", function(d) { return d.r; });
Run Code Online (Sandbox Code Playgroud)

JSFiddle上的分叉版本


nau*_*tat 4

您可以过滤布局输出的数组:

var node = svg.data([fortune2009]).selectAll("g.node")
    .data(function(d) { 
        return bubble.nodes(d).filter(function(v) {
            return v.depth > 0;
        });
    });
Run Code Online (Sandbox Code Playgroud)

请参阅更新的小提琴:http://jsfiddle.net/B9w4N/10/