Javascript d3.v4:如何使用径向链接而不是垂直/水平链接

Javascript d3.v4:如何使用径向链接而不是垂直/水平链接,javascript,d3.js,Javascript,D3.js,我正试图找出如何使用xScale和yScale,类似于本文: 建议的解决方案是使用此映射功能: var radialData = data.map(function(d) { return { source: { x: 0, y: 0 }, target: { x: Math.atan2(d.target.y - d.source.y, d.target.x - d.

我正试图找出如何使用xScale和yScale,类似于本文:

建议的解决方案是使用此映射功能:

var radialData = data.map(function(d) {
    return {
        source: {
            x: 0,
            y: 0
        },
        target: {
            x: Math.atan2(d.target.y - d.source.y, d.target.x - d.source.x) - Math.PI,
            y: Math.sqrt((d.target.x - d.source.x) * (d.target.x - d.source.x) + (d.target.y - d.source.y) * (d.target.y - d.source.y))
        }
    };
});
但是,由于source.x和source.y分配了0,所以所提供的解决方案似乎不适用于我的方法。如何正确翻译源对象和目标对象,或者我遗漏了什么

我的数据格式如下所示:

[{
  source: {
    x: -2.9799212566117377,
    y: -221.97999925512298
  },
  target: {
    x: -57.966610375613655,
    y: -94.66188293902567
  },
}, {
  source: {
    x: -20.132399189515613,
    y: -221.08524713981706
  },
  target: {
    x: -57.966610375613655,
    y: -94.66188293902567
  },
}]
另一种方法见: 但是,我不知道如何计算xScale和yScale


非常感谢您的帮助!提前谢谢你

逻辑相同,只使用原点而不是
d.source
。现在,您知道了目标相对于原点的角度和半径!然后,您可以使用完全相同的函数对源代码执行相同的操作

const数据=[{
资料来源:{
x:-2.9799212566117377,
y:-221.979925512298
},
目标:{
x:-57.966610375613655,
y:-94.66188293902567
},
}, {
资料来源:{
x:-20.132399189515613,
y:-221.08524713981706
},
目标:{
x:-57.966610375613655,
y:-94.66188293902567
},
}];
d3.选择(“svg”)
.attr(“宽度”,600)
.attr(“高度”,600)
.附加(“g”)
.attr(“转换”、“翻译(300300)”)
.selectAll(“路径水平”)
.数据(数据)
.输入()
.append(“路径”)
.attr(“类”、“水平”)
.attr(“d”,d3.linkHorizontal().x(d=>d.x).y(d=>d.y));
函数径向(p){
常数角度=数学atan2(p.y,p.x)+数学PI/2;
//抵押权
常数半径=数学平方比(p.x**2+p.y**2);
返回{
角度:角度,,
半径:半径
};
}
常数radialData=data.map(d=>({
源:径向(d源),
目标:环向(d.目标),
}));
d3.选择(“g”)
.selectAll(“path.radial”)
.数据(放射性数据)
.输入()
.append(“路径”)
.attr(“类”、“放射状”)
.attr(“d”,d3.linkRadial().angle(d=>d.angle).radius(d=>d.radius))
路径{
填充:无;
笔画宽度:2px;
}
.水平{
笔画:蓝色;
}
.放射状{
笔画:红色;
}

非常感谢你让我开心!我会试着把它还给你。