d3.js力图:链接将图扩展得太多

d3.js力图:链接将图扩展得太多,d3.js,graph,D3.js,Graph,我想在一个力定向图中显示一组节点。这些节点几乎完全是父子关系(几乎是一棵树)。有几个节点有很多子节点,而大多数其他节点是叶子。 这就产生了一个由几个相互连接的节点“岛”组成的结构。问题是,这些“岛”不断分散,特别是当节点被拖动时 在这里拉小提琴: 我在下面的模块中尝试了不同的设置: var simulation = d3.forceSimulation() .force("link", d3.forceLink().id(function(d) { return d.id; })) .force

我想在一个力定向图中显示一组节点。这些节点几乎完全是父子关系(几乎是一棵树)。有几个节点有很多子节点,而大多数其他节点是叶子。 这就产生了一个由几个相互连接的节点“岛”组成的结构。问题是,这些“岛”不断分散,特别是当节点被拖动时

在这里拉小提琴: 我在下面的模块中尝试了不同的设置:

var simulation = d3.forceSimulation()
.force("link", d3.forceLink().id(function(d) { return d.id; }))
.force("charge", d3.forceManyBody())
.force("center", d3.forceCenter(width / 2, height / 2));
但是没有运气(力量,距离…)

我的问题是: -如何在链接上设置“最大长度”,使图表不会扩散太多?
-有没有办法设置链接的“固定”长度?

您可以在每个链接上设置一个“理想”长度,模拟将尝试对其进行优化

为此,将距离方法链接到“链接”力的末端-

e、 g

您还可以将函数传递给“距离”方法,该方法允许您逐个链接改变理想距离

此外,请记住,在这里有多个力作用,因此其他力可能会“干扰”链接力。我会考虑在每个环节上使用“强度”设置,并考虑使用“碰撞”力而不是多体。


使用每个力的参数应该可以得到您想要的结果。

事实上,我有一个使用该方法的测试,但结果是相同的。不同的是,初始布局。但是,只要我单击一个节点来拖动它(即使根本不拖动它),模拟就会继续运行,并以类似的结构结束(节点孤岛由很长的“字符串”连接),即使我用forceLink()固定链接距离。distance()我建议您尝试以下操作:var simulation=d3.forceSimulation().force(“link”,d3.forceLink().id(函数(d){return d.id;}).distance(10)).force(“collide”,d3.forceCollide(10)).force(“center”,d3.forceCenter(width/2,height/2));更新的小提琴:
.force("link", d3.forceLink().id(function(d) { return d.id; }).distance({x}));