我建立神似this東西的大小的總和。我所喜歡的是讓每個節點的大小與json文件中定義的大小相同,或者,如果它沒有大小屬性,而是json中的子級屬性(它是所有子級大小的總和),則爲OR。怎麼會這樣做呢?我已經嘗試了各種方法,但缺乏添加和硬編碼它在JSON中,這是有點跛腳,我還沒有發現任何真的會工作;(任何建議,蜂巢的心態?d3.js:父母的SIZE =兒童
1
A
回答
6
如果您的數據是一個樹狀結構,你可以使用一個Partition Layout初始化節點的位置和大小。通過分區父節點返回的d.value
是默認值的所有子節點的總和,假設你已經正確設置value accessor function返回數據變量你想用於葉節點的大小
儘管partition examples中的標準顯示是用空間填充的矩形或弧來代替節點和鏈接,但它仍然具有所有基本功能其他層次佈局的類型。因此,一旦您在根上運行佈局來生成節點數組,您可以運行links function來計算鏈接。
如果仍要基於力的佈局,而不是一個靜態的樹,你可以在你的節點和鏈路傳遞給力佈局並啓動它。
總之:
var root = /*root object read from JSON data*/;
var w,h; /*set appropriately */
var partition = d3.layout.partition()
.size([w,h])
.value(function(d){return d.size;})
.children(function(d){return d.children;})
//optional: this is the default, change as needed
.sort(null);
//optional: turns off sorting,
//the default is to sort children by descending size
var nodes = partition(root);
var links = partition.links(nodes);
initialize();
var force = d3.layout.force()
.nodes(nodes)
.links(links)
.size([w,h])
/*and any other customization*/
.start();
svg.on("tick", update);
有一點要注意。由分區佈局創建的x
值設計爲矩形的角點而不是圓的中心。因此,如果您根據原始值定位您的節點,則最終會將父母帶到子女的最左側。如果你正在運行後通過基於力的佈局的一切,它最終將自行解決,但你可以從一開始就在初始化過程中設置所有的節點上d.x = d.x + d.dx/2
和d.y = d.y + d.dy/2
(例如,在你的enter()
使用.each()
呼叫中心的他們鏈)。當然,使用d.value
初始化您的節點大小(以適當的比例)。
相關問題
- 1. removeView()對兒童的父母
- 2. Flexboxs兒童溢出父母
- 3. 父母兒童微調器
- 4. XPath來選擇特定的兒童與兒童父母
- 5. 父母的措施給兒童大小
- 6. 兒童和父母之間的z-index
- 7. ExpandablelistView製作兒童羣體的父母
- 8. 檢查兒童和父母的collision2D
- 9. 父母對兒童主題 - WordPress的
- 10. Java Android - 將父母鑄造成兒童與兒童
- 11. 獲取父母的所有兒童的父母
- 12. 談論組件兒童父母和孩子的父母vue.js
- 13. JavaScript - 兒童繼承打破父母
- 14. 訪問父母從兒童模型
- 15. 角指令兒童沒有父母transclude
- 16. 父母子女怠惰兒童ID
- 17. MVC兒童 - 父母在同一頁
- 18. 紅寶石兒童父母形式
- 19. 父母致電兒童功能
- 20. 如何從父母傳遞refrence兒童在VUE JS
- 21. D3.js JSON兒子與兩個父親
- 22. 訂閱兒童路線變化,知道父母在選擇兒童路線段?
- 23. D3樹 - 接近同一母公司的所有兒童
- 24. React JS - 兒童與父母以及雙重事件之間的溝通
- 25. d3 js樹佈局多個父母
- 26. 軌,模特協會,兒童屬於父母和HAS_ONE父母關係
- 27. 函數來計算父母的大小從兒童的大小
- 28. Rails的:返回所有父母與現有的兒童
- 29. 製作父母的背景是對兒童的頂部CSS
- 30. 如何獲得插入兒童的父母ID的ID