尝试使用过滤器函数过滤出与树中当前父节点相同的父节点。到目前为止使用某些值时,例如
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中过滤节点数组,只将它应用于那些父节点与当前节点相同的节点
答案 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
希望这有帮助!