我是 OP,为了其他有相同问题的人,这个答案只是对上述优秀答案的补充。
答案显示了如何为带有弧链接的图形实现这一点。如果您有直接链接,则需要稍微修改接受的答案。这是如何:
您的直接链接可能是用 实现的line
,它们需要转换为polyline
. 像这样:
// old: svg.selectAll(".link").data(links).enter().append("line")
svg.selectAll(".link").data(links).enter().append("polyline")
然后我们必须根据这个例子对折线进行编码,所以你的原始代码编码line
:
force.on("tick", function() {
link.attr("x1", function(d) {return d.source.x;})
.attr("y1", function(d) {return d.source.y;})
.attr("x2", function(d) {return d.target.x;})
.attr("y2", function(d) {return d.target.y;});
更改为:
force.on("tick", function() {
link.attr("points", function(d) {
return d.source.x + "," + d.source.y + " " +
(d.source.x + d.target.x)/2 + "," + (d.source.y + d.target.y)/2 + " " +
d.target.x + "," + d.target.y; });
最后,不要忘记转换marker-end
为marker-mid
:
// old: link.attr("marker-end",
link.attr("marker-mid",
感谢@Phrogz 为您指明方向。