如何过滤掉与d3.js中当前节点具有相同父节点的节点

时间:2015-10-30 09:27:08

标签: d3.js

尝试使用过滤器函数过滤出与树中当前父节点相同的父节点。到目前为止使用某些值时,例如

tree.nodes(root).filter(function(d) { return d.size <= 20000; })

给我那些大小小于或等于20000的节点,尝试扩展它以获得具有相同父节点的节点

tree.nodes(root).filter(function(a, d) { return a.parent ==  d.parent; })

这会返回一个null结果,我该怎么写它才能得到正确的结果

设法用这样的全局最大值

来做到这一点
node.append("circle")
      .style("fill", function(d) { return color((d.children ? d : d.parent).name); })
      .attr("r", function(d) { return root.children ? d3.scale.linear().domain([0, d3.max(nodes, function(d) { return d.size;})]).range([0, 100])(d.size)  : 100;});

但是想在d3 max中过滤节点数组,只将它应用于那些父节点与当前节点相同的节点

1 个答案:

答案 0 :(得分:0)

我使用的是http://bl.ocks.org/mbostock/4063550

引用的相同示例

您可以使用以下颜色为具有相同父级的子节点着色:

node.append("circle")
    .attr("r", 4.5).style("fill", function (d) {
    if (d.parent){
        return colors(d.parent.name);
    } else {
        return "steelblue";
    }
}).style("stroke", function (d) {
    if (d.parent){
        return colors(d.parent.name);//this will return same color for same parent name
    } else {
        return "steelblue";
    }
});

修改

对于基于大小的变量半径,请按照您在问题中进行缩放:

var scale = d3.scale.linear().domain([0, d3.max(nodes, function (d) {
    return d.size;
})]).range([0, 100]); 

这里我这样做一次,而不是每次都在计算半径的函数中进行比例功能。

node.append("circle")
    .attr("r", function (d) {
    return (d.size ? scale(d.size) : 4);
})

检查尺寸存在b&#39;因为在某些情况下它不存在所以半径是NaN(不是数字),这可能是它不适合你的原因。 我已经用上述更改更新了小提琴

完整的工作代码here

希望这有帮助!