示例:http://mbostock.github.com/d3/ex/bubble.html
我很难理解第16行的内容:
.data(bubble.nodes(classes(json))
为什么或者在classes()函数中的位置,变量classes []获得为每个对象定义的x,y,r值。另外,bubble.nodes()似乎不是一个实际的函数?
如果我添加
console.log(classes)
第44行和第45行之间的- 里面的每个对象似乎都已经填充了x,y,r - 但是为什么会发生这种情况并不明显。
答案 0 :(得分:2)
bubble.nodes()
的来电归结为自bubble=d3.layout.pack()
以来对d3.layout.pack().nodes()
的来电。诀窍是pack.nodes()
被硬编码以使用输入value
的{{1}}键(在这种情况下是所有包)来调整节点的大小(添加children
)并确定位置(添加r
和x
)。
实质上,
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()
,r
和x
,因为y
没有没有那些属性。 krasnaya的回答触及了大部分内容,但我觉得需要更多解释(至少它对我有用)。
答案 1 :(得分:1)
classes()函数不添加属性..它只是使树变平。这些属性添加在bubble.nodes()中(即d3.layout.pack()。nodes())
JSON.stringify(classes[0])
"{"packageName":"cluster","className":"AgglomerativeCluster","value":3938}"