我想知道是否可以稍微更改d3.layout中的包裝算法。也就是說,我想知道如果不是在觸及父節點的位置放置一個具有最高值的子節點,可以將它放在中間。現在看起來好像所有的孩子都是通過螺旋進入父母身邊的小孩。控制D3圓圈包佈局算法中圓圈的順序
我希望這不是太混亂。我會很樂意澄清什麼是不明確的。
我想知道是否可以稍微更改d3.layout中的包裝算法。也就是說,我想知道如果不是在觸及父節點的位置放置一個具有最高值的子節點,可以將它放在中間。現在看起來好像所有的孩子都是通過螺旋進入父母身邊的小孩。控制D3圓圈包佈局算法中圓圈的順序
我希望這不是太混亂。我會很樂意澄清什麼是不明確的。
這是可能的。
你只需要在d3.js替換此代碼:此代碼
function d3_layout_packSort(a, b) {
return a.value - b.value;
}
:
function d3_layout_packSort(a, b) {
return -(a.value - b.value);
}
(只是一個符號的變化)
最大的社交圈也不會在父母的中心,但他們往往會靠近中心。我的理解是,你不需要在中心的確切位置,只是近似的,所以我希望這會滿足你的想法。
下圖說明了與常規和改性d3.js,並排側獲得圓形組件例如:
I的種類往往喜歡改性填料更多。 :)所以我想這是一個好主意。檢查它與數據的外觀。
您可以在這裏訪問這些示例:regular,modified。
我修改過的d3.js是here。
讓我知道你是否還有其他問題。
D3是開源的,所以你可以做任何你喜歡的修改。對於包裝佈局,將元素放置在包含形狀的中心將需要進行可能相當大的修改,儘管這樣做會進一步限制可用空間。
也就是說,在邊緣有一個圓圈,其餘的空間直到另一個邊緣可以用於其他圓圈。如果圓形在中心,則直到邊緣的空間更少,因此圓形空間更少。爲了保持大小和數據之間的視覺關聯,中心的圓圈必須更小,等等。
所以你說的不是一個簡單的修改,而是實現的算法的改變。根據你想要做什麼,用D3的另外一種佈局實現這一點可能會更容易。
夥計,就是這樣。非常感謝。唯一的不需要改變d3.js中的函數,而只需在包聲明中添加.sort(比較器)即可。爲我工作! – Kaster