我有一个D3可缩放的圆形图表,基于迈克的演示工作:
http://bl.ocks.org/mbostock/7607535
在D3 wiki中
https://github.com/mbostock/d3/wiki/Pack-Layout
我看到可以使用
pack.children([children])
为子项指定数组,是吗?
因此,在上面的演示中,有人会如何使用它来解析相同的演示JSON,但是对于子类型的键是“子类型”(或其他)而不是“子”?如果那些孩子的孩子有不同的名字,那么该怎么办呢?
在查看D3代码之后,似乎D3 真的想要找到这些分层打包布局的“孩子”。
我可以忍受它,但任何帮助都会受到赞赏,以进一步推动我目前的D3潜水。
谢谢!
答案 0 :(得分:1)
让我们在你的耀斑数据中说你的孩子收藏品名为bob:
{
"name": "flare",
"bob": [
{
"name": "analytics",
"bob": [
{
"name": "cluster",
"bob": [
{"name": "AgglomerativeCluster", "size": 3938},
{"name": "CommunityStructure", "size": 3812},
{"name": "HierarchicalCluster", "size": 6714},
{"name": "MergeEdge", "size": 743}
]
},
{
"name": "graph",
"bob": [
{"name": "BetweennessCentrality", "size": 3534},
{"name": "LinkDistance", "size": 5731},
{"name": "MaxFlowMinCut", "size": 7840},
{"name": "ShortestPaths", "size": 5914},
{"name": "SpanningTree", "size": 3416}
]
...
修改只是:
var nodes = pack.children(function(d){
return d.bob;
}).nodes(root);
现在如果你在每个级别都有不同的名字怎么办?首先,我认为这实际上是一个糟糕的结构,你应该改变源数据。但是,如果你不能做什么呢?也许这样的事情会起作用:
var nodes = pack.children(function(d){
if (d['children'] !== undefined){
return d['children'];
} else if (d['bob'] !== undefined){
return d['bob'];
}
}).nodes(root);