javascript - 在 d3.js 中将节点和链接转换为分层树

标签 javascript html d3.js tree force-layout

我有一个 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 objetc?

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

最佳答案

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

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

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

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

这应该足够好了:

force
  .nodes(spread.nodes)
  .links(spread.links)
  .start();

关于javascript - 在 d3.js 中将节点和链接转换为分层树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13903854/

相关文章:

javascript - 通过一串点符号设置对象字面量的深度?

javascript - JS全局变量保持不变

javascript - 如何使用css或js选择animation-iteration-count的值?

javascript - 在 document.ready() 之前获取 HTML 标签,在 DOM 渲染之前

javascript - 一个html中有很多div

html - block 元素在页面上不可见

c# - Page.FindControl 为 DIV 返回 null

d3.js - 使用 D3.js、Leaflet 或 Mapbox 用墨卡托 map 包裹大圆圈

json - D3 map ,点击并从json中获取id

javascript - 同时转换 xAxis 和数据 - D3.js