2015-12-22 101 views
0

我目前正在使用d3.js中的修改的Zoomable Treemap(http://bost.ocks.org/mike/treemap/)工作,但我遇到了一些困難,無法實現我正在尋找的特定行爲。d3.js尊重每個樹圖節點的權重

理想情況下,樹中的每個節點將根據其指定的權重而不是其子元素的權重總和來確定大小。我能找到的唯一相關問題(d3.js - Treemap where parent's value is greater than sum of its children)並不完全符合我的要求,儘管它可能會用於創建類似的效果。但是,嘗試使用過濾的虛擬節點方法在修改其子級時使父級大小保持不變會導致難看的過渡工件。我認爲這是由於更高層意識到虛擬節點,但較低層不知道(因爲它被過濾,所以它不可見)。

我該如何去實現這種行爲?

回答

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; 
} 

現在的節點根據需要獨立子女的規模。

希望這可以在未來爲別人節省一些困惑。