我目前正在使用d3.js中修改过的Zoomable Treemap(http://bost.ocks.org/mike/treemap/)开发一个项目,但是我在实现我正在寻找的这种特定行为时遇到了一些困难。
理想情况下,树中的每个节点都将根据其指定的权重而不是其子项的权重之和进行调整。我能找到的唯一相关问题(d3.js - Treemap where parent's value is greater than sum of its children)并不是我想要的,尽管它可能会被用来创造类似的效果。但是,尝试使用过滤后的虚节点方法在修改其子节点时保持父节点的大小不变会导致丑陋的过渡伪像。我假设这是因为更高级别意识到虚拟节点,但较低级别不知道(因为它被过滤,因此它不可见)。
我如何实施此行为?
答案 0 :(得分:0)
事实证明,我使用的实现已经有一个负责此行为的函数(accumulate(d))。我通过重写它来解决这个问题,总是像这样直接返回节点的值:
function accumulate(d) {
var result = (d._children = d.children)
? d.value
: d.value;
if(d.children){
d.children.forEach(accumulate);
}
return result;
}
现在节点根据需要独立于子节点进行扩展。
希望将来可以为别人带来一些困惑。