D3 Bubble示例:bubble.nodes()有什么作用?

时间:2012-07-17 20:57:02

标签: javascript json svg d3.js circle-pack

示例:http://mbostock.github.com/d3/ex/bubble.html

enter image description here

我很难理解第16行的内容:

.data(bubble.nodes(classes(json))

为什么或者在classes()函数中的位置,变量classes []获得为每个对象定义的x,y,r值。另外,bubble.nodes()似乎不是一个实际的函数?

如果我添加

console.log(classes)
第44行和第45行之间的

- 里面的每个对象似乎都已经填充了x,y,r - 但是为什么会发生这种情况并不明显。

2 个答案:

答案 0 :(得分:2)

bubble.nodes()的来电归结为自bubble=d3.layout.pack()以来对d3.layout.pack().nodes()的来电。诀窍是pack.nodes()被硬编码以使用输入value的{​​{1}}键(在这种情况下是所有包)来调整节点的大小(添加children)并确定位置(添加rx)。

实质上,

y

这也引起了我的兴趣,你可以看到 var root = {"children": [ {"packageName":"cluster","className":"AgglomerativeCluster","value":3938}, {"packageName":"cluster","className":"CommunityStructure","value":3812}, {"packageName":"cluster","className":"HierarchicalCluster","value":6714}, {"packageName":"cluster","className":"MergeEdge","value":743} ]}; // This is an excerpt of the real data. var bubble = d3.layout.pack(); // pack.nodes() assigns each element of "children" a r, x, and y based on value bubble.nodes(root); 没有添加classes()rx,因为y没有没有那些属性。 krasnaya的回答触及了大部分内容,但我觉得需要更多解释(至少它对我有用)。

答案 1 :(得分:1)

classes()函数不添加属性..它只是使树变平。这些属性添加在bubble.nodes()中(即d3.layout.pack()。nodes())

JSON.stringify(classes[0])
"{"packageName":"cluster","className":"AgglomerativeCluster","value":3938}"