Javascript 如何在D3径向Reingold–Tilford树中以特定半径定位链接?

Javascript 如何在D3径向Reingold–Tilford树中以特定半径定位链接?,javascript,svg,d3.js,Javascript,Svg,D3.js,我使用Mike Bostock的代码与示例非常相似,但我希望根据JSON数据的每个元素中包含的变量来控制节点的位置和半径 我可以使用我提到的变量上的线性比例对这样的节点执行此操作: var node = svg.selectAll(".node") .data(nodes) .enter().append("g") .attr("class", "node") .attr("transform", function(d) { return "rotate(" + (d.x - 9

我使用Mike Bostock的代码与示例非常相似,但我希望根据JSON数据的每个元素中包含的变量来控制节点的位置和半径

我可以使用我提到的变量上的线性比例对这样的节点执行此操作:

var node = svg.selectAll(".node")
  .data(nodes)
  .enter().append("g")
  .attr("class", "node")
  .attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + scale(d.variable) + ")"; })
但我无法确定需要与节点对应的链接的起始和结束位置是如何由对角线的默认值控制的:


有人能解释一下这个投影是如何工作的吗?我应该如何修改它以使链接以特定的半径开始和结束?

如果你已经有了节点的位置,就不需要运行布局。我对每个节点都有一个离中心的距离,但是让算法计算出角度位置。想一想,我想这可能比我想象的要简单得多。但是我仍然不理解默认对角线的投影,例如,d.x的初始值是什么,它是在哪里生成的,d.x/180*Math.PI的作用,以及为什么投影在x之前返回y……树布局在笛卡尔坐标系下工作;你提到的东西会在飞行中将它们转换为极坐标。
var diagonal = d3.svg.diagonal.radial()
  .projection(function(d) { return [d.y, d.x / 180 * Math.PI]; });