Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用D3.JS在同一级别上显示所有叶_Javascript_D3.js_Tree - Fatal编程技术网

Javascript 使用D3.JS在同一级别上显示所有叶

Javascript 使用D3.JS在同一级别上显示所有叶,javascript,d3.js,tree,Javascript,D3.js,Tree,我最近开始使用D3.js,以便以放射状树的形式可视化树,如中所示,但在修改代码时遇到了一些问题 我使用中的代码来显示相同“级别”上的所有叶。我的方法如下: 首先,使用以下代码计算树的最大深度,以知道树的所有叶子放在何处: var maxDepth = getDepth(source); function getDepth(obj) { var depth = 0; if (obj.children) { obj.children.forEach(function (d) {

我最近开始使用D3.js,以便以放射状树的形式可视化树,如中所示,但在修改代码时遇到了一些问题

我使用中的代码来显示相同“级别”上的所有叶。我的方法如下:

首先,使用以下代码计算树的最大深度,以知道树的所有叶子放在何处:

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;})
它似乎工作正常,只是有些节点的位置不正确,有时重叠

如何调整代码以更有效的方式传播节点?完整的代码可用。

使用d3的集群布局,它的设计目的是将叶子放置在同一水平面上


可能只是使用默认的深度,因为数据集是一棵树(有子树),所以这种方法无法获得正确的位置。我建议将数据展平并将其传递给d3.agani
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