Javascript &引用;“叶证明”;D3树图?

Javascript &引用;“叶证明”;D3树图?,javascript,d3.js,Javascript,D3.js,我需要做什么才能使树形图渲染,从而使节点朝向图的叶侧对齐 我想要一个任意的树形图,通常看起来像: 其结果是否类似于: 一种方法是发现树的深度,并将没有任何子节点的每个节点的depth属性设置为该值 假设您的树数据如下所示: var data = [ { "name": "Top Level", "parent": "null", "children": [ { "name": "Le

我需要做什么才能使树形图渲染,从而使节点朝向图的叶侧对齐

我想要一个任意的树形图,通常看起来像:

其结果是否类似于:


一种方法是发现树的深度,并将没有任何子节点的每个节点的
depth
属性设置为该值

假设您的树数据如下所示:

var data = [
    {
        "name": "Top Level",
        "parent": "null",
        "children": [
            {
                "name": "Level 2: A",
                "parent": "Top Level",
                "children": [ ...
您使用以下方法创建了一棵树:

var tree = d3.layout.tree();
通过搜索每个节点的
深度的最大值,可以获得树的
深度

var treeDepth = d3.max(tree(data[0]), function(d) { return d.depth; });
一旦完成此操作,您可以在每次重新计算树布局时重置它:

tree.nodes(data[0]).forEach(function(d) {
    var depthSize = 50;
    if (!d.children) { // this node has no children
        d.depth = treeDepth; // set depth to depth of tree
    }
    d.y = d.depth * depthSize; // recalculate y
});
这适用于您的示例中所示的树布局(从左到右)。对于自上而下的布局,您必须更改
d.x


这是一个,其工作解决方案改编自

我意识到我没有解释这一点,但我需要所有节点“叶对齐”,这样所有节点都有一个可能的最大深度,小于它们最浅的子节点。您的代码为我指明了正确的方向,因此我能够按照中所示进行修改。