> [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
分區布局將會產生鄰接的圖形:一個節點鏈的樹圖的空間填充轉化體。節點將被繪制為實心區域圖(無論是弧還是矩形),而不是在層次結構中繪制父子間鏈接,節點將被繪制成固定區域(弧度或者方形),并且相對于其它節點的位置顯示它們的層次結構中的位置。節點的尺寸將編碼為一個量化的維度,這將難以在一個節點鏈圖中展示。
就像D3的其他類,布局將遵循方法鏈模式,setter方法返回布局本身,并通過一個簡潔的語句來調用多個setter方法。
# d3.layout.partition()
創建一個新的帶有默認設置的分區布局:默認為值降序的排序順序;默認值的訪問器假定為每一個輸入值是一個帶有數值屬性的對象;默認子值的訪問器假定為每一個輸入值是一個帶有子值數組的對象,大小為1為1×1。
# partition(root)
# partition.nodes(root)
運行分區布局,將返回指定根節點的相關聯的節點陣列數組。分區布局是D3家族分層布局中的一部分。這些布局將遵循相同的基本結構:傳遞給布局的輸入參數值是層次結構的根節點,并且輸出返回值將是一個代表所有節點經過計算的位置的數組。每個節點上將擁有以下幾個屬性:
? parent - 父節點,或空的根節點。
? children - 子節點的陣列數組,或者為空的葉節點。
? value - 該節點的值,值訪問器所返回的值。
? depth - 節點的深度(即節點的層級數),根節點為0。
? X–節點位置的最小x坐標。
? y–節點位置的最小y坐標。
? dx - 節點位置的x范圍。
? dy - 節點位置的y范圍。
雖然布局只有一個x和y尺寸,但它卻可以表示一個任意的坐標系;例如,你可以把X作為半徑、y作為角度用以產生徑向而非笛卡爾布局。在笛卡爾取向上,x,y,dx和dy分別相當于SVG矩形元素的“x”,“y”,“width”和“height”屬性。在徑向取向上,它們可以被用于計算弧生成器的innerRadius,startAngle,outerRadius和endAngle。笛卡爾取向可被稱為冰柱樹,而徑向取向被稱為旭日圖。
# partition.links(nodes)
給定指定的節點數組,比如這些返回的節點,將返回一個對象數組,該數組表示從父到子的每個節點的鏈接。葉節點將不會有任何的鏈接。每個鏈接是一個對象,每個對象具有以下兩個屬性:
? source - 父節點(如上所述)。
? target - 子節點。
此方法適用于檢索一組適于顯示的鏈接描述,通常與對角線形狀生成器結合使用。例如:
svg.selectAll("path")
.data(partition.links(nodes))
.enter().append("path")
.attr("d", d3.svg.diagonal());
# partition.children([children])
如果指定了children,將設置指定的children訪問器方法。如果沒有指定children,則返回當前的children訪問器方法,默認輸入數據是一個帶有一個children數組的對象:
function children(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}
]
}
]
}
]
}
children訪問器將在層次結構根節點中首先被調用。如果訪問器返回null,則該節點被認為為葉節點,直到布局遍歷終止。否則,訪問器就會返回一個表示子節點的數據元素的數組。
# partition.sort([comparator])
如果指定的comparator,將使用指定的比較方法來設置為布局的同級節點的排序順序。如果沒有指定comparator,返回當前組的排序順序,其默認為相關的輸入數據的數值屬性降序排列:
function comparator(a, b) {
returnb.value - a.value;
}
比較器方法用來被節點對調用,此節點對傳遞給每個節點的輸入數據。若比較器方法為null,則排序將被禁用,之后將使用樹的遍歷順序。比較器方法也可以使用d3.ascending或d3.descending實現。
# partition.value([value])
如果指定value,便將其設置為指定的訪問器方法。否則返回當前值訪問器,即輸入數據是一個帶有數值屬性的對象:
function value(d) {
returnd.value;
}
值訪問器將被每個輸入的數據元素調用,并且一定會返回一個數字,該數字表示該節點的數值屬性值。此值將被成比例的設置每個節點的面積值。
# partition.size([size])
如果指定的size,將通過指定的二元素數組[x,y]設置為有效布局的大小。如果沒有指定size,返回當前布局大小,默認為1×1。
* Harry 譯 2014-11-29
* 咕嚕校對 2014-11-30 21:02:50