Javascript 如何将Reingold–;蒂尔福德树变成D3中的双面树

Javascript 如何将Reingold–;蒂尔福德树变成D3中的双面树,javascript,d3.js,tree,visualization,data-visualization,Javascript,D3.js,Tree,Visualization,Data Visualization,我目前正在处理这个示例,并正在寻求有关如何将此树转换为双面树的建议。我之所以使用这种树状结构,是因为我的文本/标签很长,希望将它们放在一个页面中。我还尝试了径向树选项,但长标签会与其他标签重叠。我试图根据一个名为size的参数包装一些文本,但没有成功。我的径向树代码在这个链接中可用。我想使用的实际标签非常长,如链接中所示。我不能讨论标签,因为这是研究工作的一部分,不能公开展示 基本上我不想在这篇文章中问两个问题。首先,有没有一种方法可以将普通的Reingold–Tilford树转换为双面树 第二

我目前正在处理这个示例,并正在寻求有关如何将此树转换为双面树的建议。我之所以使用这种树状结构,是因为我的文本/标签很长,希望将它们放在一个页面中。我还尝试了径向树选项,但长标签会与其他标签重叠。我试图根据一个名为size的参数包装一些文本,但没有成功。我的径向树代码在这个链接中可用。我想使用的实际标签非常长,如链接中所示。我不能讨论标签,因为这是研究工作的一部分,不能公开展示

基本上我不想在这篇文章中问两个问题。首先,有没有一种方法可以将普通的Reingold–Tilford树转换为双面树

第二个问题是,是否有方法根据JSON中给定的size属性包装所选文本。下面给出了我想要更改的代码,但它不起作用,如果有人能帮我解决这个问题,那就太好了。在代码段的最后一行,我想调用wrap函数(代码中的一个内部方法),检查属性大小是否等于某个值,但我无法这样做。有人能告诉我如何改进最后一行吗

node.append("text")
                  .attr("dx", function(d) { return d.x < 180 ? 10 : -10; })
                  .attr("dy", ".31em")
                  .attr("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; })
                  .attr("transform", function(d) { return d.x < 180 ? null : "rotate(180)"; })
                  .text(function(d) { return d.name; })
                  .attr("wraper", function(d) { return d.size == "3534" ? node.call(wrap,0) : node.call(wrap,0);
});
node.append(“文本”)
.attr(“dx”,函数(d){返回d.x<180?10:-10;})
.attr(“dy”,“.31em”)
.attr(“文本锚定”,函数(d){返回d.x<180?“开始”:“结束”})
.attr(“transform”,函数(d){返回d.x<180?null:“rotate(180)”;})
.text(函数(d){返回d.name;})
.attr(“wrapper”,函数(d){return d.size==“3534”?node.call(wrap,0):node.call(wrap,0);
});

如果以上任何一个问题都能得到回答那就太好了,尽管我希望我的第一个问题能得到回答

我不知道你说的双面树是什么意思?你是说两棵并排的树?如果是这样,您将不得不拆分数据


至于第二个问题,您不能使用nodes.filter。通过数据中的“大小”属性过滤它们?

正如另一个答案中所建议的,最好的做法是将数据拆分为“左”和“右”树。每个树都有一个公共节点,即“根节点”


当渲染树“全部”时,你必须做的是将根节点保持在最上面。“双树”的意思是根节点在中间,分支都是向左和向右分支。(I-I)像这样。这就是你的数据的设置方式。如果你想自己拆分数据,你必须拆分数据。你能给我举个小例子吗?如果我拆分数据,树将如何在左右方向上分支?你想要的方式是:“他根节点在中间,分支都向左和向右分支”,这纯粹是你的数据是如何设置的。我希望树的长度缩短,宽度增加,这样我就可以在一张纸上以横向模式打印出来。