> [Wiki](Home) ? [[API--中文手冊]] ? [[布局]] ? **層次布局**
* 如發現翻譯不當或有其他問題可以通過以下方式聯系譯者:
* 郵箱:zhang_tianxu@sina.com
* QQ群:[D3數據可視化](http://jq.qq.com/?_wv=1027&k=ZGcqYF)205076374,[大數據可視化](http://jq.qq.com/?_wv=1027&k=S8wGMe)436442115
分層布局是一種抽象布局,不直接使用。但它允許在不同的分層布局中共享節點。請看下列例子:
? Cluster -簇實體構成樹狀圖。
? Pack -使用遞歸圓填充法創建一個分層布局。
? Partition -將節點樹遞歸劃分成輻射狀或環狀。
? Tree -將節點樹整齊放置。
? Treemap -使用遞歸空間劃分顯示節點樹。
雖然不是分層布局,但捆綁布局可以同分層共同使用。
# d3.layout.hierarchy()
使用以下默認設置創建新的分層布局:默認排序順序為值的降序排列;默認值訪問器假定每個輸入數據為一個含數值屬性的對象;默認子訪問器假定每個輸入數據為一個含子數列的對象。
# hierarchy(root)
運行分層布局,返回節點數組及指定的根節點。布局的輸入參數為分層的根節點,輸出返回值為一個數組,表示計算過的所有節點的位置。每個節點都有各自屬性:
? parent -父節點,在根節點時為空。
? children -子節點數組,在葉節點時為空。
? value -節點值,由值訪問器返回。
? depth -節點深度,從根節點計算,值從0開始。
此外,多數分層布局也會計算節點的x和y的位置;詳見實現類。
# hierarchy.links(nodes)
指定節點數組返回一個對象數組,該數組表示每個節點中父節點同子節點之間的關系。葉節點沒有任何關系。每個節點都是一個具有兩個屬性的對象:
? 源-父節點(如上述所示)。
? 目標-子節點。
該方法在獲取一組關系描述時很有效果,通常與對角圖形生成器共同使用。例如:
svg.selectAll("path")
.data(partition.links(nodes))
.enter().append("path")
.attr("d",d3.svg.diagonal());
# hierarchy.children([accessor])
如果accessor已經指定,則設定子訪問器函數。如未指定,則返回當前子訪問器函數,該函數將輸入數據默認為帶子數組的對象:
functionchildren(d){
returnd.children;
}
通常,使用d3.json可以方便地加載節點分層,并將輸入分層表示為一個嵌套JSON對象。例如:
{
"name":"flare",
"children":[
{
"name":"analytics",
"children":[
{
"name":"cluster",
"children":[
{"name":"AgglomerativeCluster","size":3938},
{"name":"CommunityStructure","size":3812},
{"name":"MergeEdge","size":743}
]
},
{
"name":"graph",
"children":[
{"name":"BetweennessCentrality","size":3534},
{"name":"LinkDistance","size":5731}
]
}
]
}
]
}
在分層中,子訪問器在根節點首先被調用。如果訪問器返回值為空,則該節點在布局遍歷結束時被假定為葉節點。否則,訪問器需要返回數據源數組,來表示子節點。參數node和depth都需要調用訪問器。
# hierarchy.sort([comparator])
如已指定comparator,則使用指定的comparator函數設定布局的同級節點節點順序。如comparator未指定,則返回當前分組的排序順序,默認值為按照輸入數據的字符串名對節點的降序順序排序:
functioncomparator(a,b){
returnb.value-a.value;
}
為每對節點,調用comparator函數。零comparator禁用排序,使用樹遍歷順序。comparator函數也可以通過d3.ascending或d3.descending實現。
# hierarchy.value([value])
如果已經指定value,則用指定的函數設定值訪問器。如果尚未指定value,則返回當前值訪問器。默認訪問器假定輸入數據為一個具有數值屬性的對象:
functionvalue(d){
returnd.value;
}
每次輸入數據元素,都會調用值訪問器,并且必須返回一個用以表示節點數值的數字。對于區域布局,如樹圖,該值用于設定每個節點值相應的面積。對于其他布局,該值對簇布局沒有影響。
# hierarchy.revalue(root)
對于一棵指定的樹,從根開始重計算每個節點的值,但不需對子節點進行重新排序或重新計算。該方法可以用于對每個節點值進行重新計算,但又不必對分層做出任何結構改變。最初,該方法是用來支持sticky treemaps的。
* 張爍譯 20140430
* 咕嚕校對 2014-11-30 10:42:08