javascript - 使用D3.JS在同一层显示所有叶子

标签 javascript d3.js tree

我最近开始使用 D3.js 来以径向树的形式可视化一棵树,如 Colapsible Radial Tree 中所示。 ,但是我在修改代码的时候遇到了一些问题。

我使用了1中的代码将所有叶子显示在同一“级别”上。我的方法如下:

首先,使用以下代码计算树的最大深度,以了解将树的所有叶子放在哪里:

var maxDepth = getDepth(source);
function getDepth(obj) {
var depth = 0;
if (obj.children) {
    obj.children.forEach(function (d) {
        var tmpDepth = getDepth(d)
        if (tmpDepth > depth) {
            depth = tmpDepth
        }
    })
}
return 1 + depth}

然后,循环遍历树的所有节点,每当遇到没有子节点的节点(=叶子)时,位置将设置为:

nodes.forEach(function(d) {
if (d.children)
  {
    d.y = d.depth * 60;
  }else
    d.y = maxDepth * 60;})

它似乎工作正常,只是某些节点的位置不正确并且有时重叠。 Radial Tree

如何调整代码以更有效的方式传播节点?完整代码可查看here .

最佳答案

使用 d3 的布局,它旨在将叶子放置在同一级别

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

https://bl.ocks.org/mbostock/4063570

var tree = d3.layout.cluster()
    .size([360, diameter / 2 - 80])
    .separation(function(a, b) { return (a.parent == b.parent ? 1 : 5) / a.depth; });

...

  // Normalize for fixed-depth.
  //nodes.forEach(function(d) { d.y = d.depth * 80; }); // get rid of this line (or amend it) as it resets the leaves to one level below the parent

关于javascript - 使用D3.JS在同一层显示所有叶子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36773793/

相关文章:

javascript - d3.js 重写 version4 中的缩放示例

javascript/Angular $promise 和 catch 作为独立函数

javascript - 将 JS 变量设置为 $.get 请求

javascript - 如何使用 javascript 访问 json 中的嵌套键

d3.js - 我的城市正在用错误的投影绘制(非常小并且在左边)。使用 d3.geo.albersUSA()

c++ - boost ptr_vector 迭代器

javascript - ngFocus 在 Firefox 上出现问题?

Javascript 替换下划线后的文本

javascript - 如何在 d3 折线图中的线上创建点(散点图)

java - 如何在 Java 中显示树层次结构?