2013-02-10 157 views
8

這個圈子組佈置的一例(http://bl.ocks.org/4063269)是一個完美的項目我的工作,但它大小都是相對的圓圈彼此:可能在d3.js中使用固定圈大小的圓形包佈局?

enter image description here

是否有指定固定半徑的簡單方法每個圈子?

我搜索了源代碼,例子,谷歌和stackoverflow,似乎無法找到任何有用的東西。

圓圈的確切尺寸對我很重要。

+0

user2058412,你能看看我的答案嗎?對你有用嗎? – VividD 2014-06-26 11:15:04

回答

1

如果你按照你給的例子代碼中,<circle>元素的尺寸正在這裏決定:

node.append("circle") 
    .attr("r", function(d) { return d.r; }) 
// ... 

要解決的圈子,說,50,你可以做到這一點的大小:

node.append("circle") 
    .attr("r", function(d) { return 50; }) 
// ... 

更新

這意志,howeve r,如評論中指出的那樣打破布局。爲了解決這個問題,一個可以提供相同的value到每個節點:

// Returns a flattened hierarchy containing all leaf nodes under the root. 
function classes(root) { 
    var classes = []; 

    function recurse(name, node) { 
    if (node.children) node.children.forEach(function(child) { recurse(node.name, child); }); 
    else classes.push({packageName: name, className: node.name, value: node.size}); 
    } 

    recurse(null, root); 
    return {children: classes}; 
} 

到:

// Returns a flattened hierarchy containing all leaf nodes under the root. 
function classes(root) { 
    var classes = []; 

    function recurse(name, node) { 
    if (node.children) node.children.forEach(function(child) { recurse(node.name, child); }); 
    else classes.push({packageName: name, className: node.name, value: 1}); 
    } 

    recurse(null, root); 
    return {children: classes}; 
} 
+0

感謝您的回覆!我實際上嘗試過,但它打破了佈局: http://cl.ly/image/2M3o1T2n2k1V。它應該看起來的樣子是:http://cl.ly/image/1U1b3v3m152W – user2058412 2013-02-12 03:58:24

+0

更新了可能的修復答案。 – 2013-02-12 06:52:11

6

這是可能的,簡單的事。第一個答案是準確的,但我相信我的是更簡單,更明確,所以我也附加它。

請看看這個例子:jsfiddle

當你按下「恆」按鈕,你會看到這樣的事情:

enter image description here

關鍵代碼行是這樣的:

pack.value(function(d) { return 100; }) 

這將使數據圓圈半徑不變。 100當然可以是任何常數。你可以在circle pack初始化中應用這一行(很可能這是你的情況),或者重新初始化(就像我的例子)。

希望這會有所幫助。