带有儿童阵列的JS mod的D3打包圆形儿童图表

时间:2015-02-03 18:10:50

标签: json d3.js javascript nvd3.js

我有一个D3可缩放的圆形图表,基于迈克的演示工作:

http://bl.ocks.org/mbostock/7607535

在D3 wiki中

https://github.com/mbostock/d3/wiki/Pack-Layout

我看到可以使用

pack.children([children])

为子项指定数组,是吗?

因此,在上面的演示中,有人会如何使用它来解析相同的演示JSON,但是对于子类型的键是“子类型”(或其他)而不是“子”?如果那些孩子的孩子有不同的名字,那么该怎么办呢?

在查看D3代码之后,似乎D3 真的想要找到这些分层打包布局的“孩子”。

我可以忍受它,但任何帮助都会受到赞赏,以进一步推动我目前的D3潜水。

谢谢!

1 个答案:

答案 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);