4

我有一个 JSON 表示一个图(在我的情况下也是一个树),看起来像这样:

{"directed": true, "graph": [], 
"nodes": [{"time": 4, "id": 4551308, "name": "Alto da Boa Vista"}, {"time": 7, "id": 4551309, "name": "Sumare"},
...
"links": [{"source": 0, "target": 36, "weight": 1}, 
{"source": 1, "target": 36, "weight": 1},
...

为了使用它来构建像本例中那样的树, http: //mbostock.github.com/d3/talk/20111116/force-collapsible.html,我需要将此 JSON 转换为具有嵌套子节点的分层对象在父母中,如下所示:https ://github.com/mbostock/d3/wiki/Tree-Layout#wiki-tree 。

D3 是否有一些内置函数可以将图形转换为树?或者您将如何从图形生成嵌套树 JSON 对象?

我在这个 jsFiddle 中有示例:http: //jsfiddle.net/fccoelho/bFT8K/8/

4

1 回答 1

3

好的,这是一个两部分的答案。

第 1 部分: D3 确实具有将数组转换为嵌套结构的内置功能。看看 d3.nest() 函数

这主要用于分层布局:Cluster、Pack、Partition、Treemap

第 2 部分: 如果您尝试实现与您发布的示例类似的布局,那么您无需对数据执行任何操作。该示例使用需要图形的强制布局。由于力布局可以处理任何形状的图形,而树只是遵循一些约束的图形,因此您无需进行任何转换。如果图表的形状恰好是一棵树,它看起来就像一棵树。

这应该足够好:

force
  .nodes(spread.nodes)
  .links(spread.links)
  .start();
于 2013-11-22T14:00:50.120 回答