在力导向图中防止节点重叠

7
我已经为社交网络分析构建了一个力导向图。我面临的问题是节点不断重叠,如何防止在力导向图中节点重叠?这是我的带有虚拟数据的代码链接,下面是我的力导向图像。如何消除这些节点的重叠?如何保持链接之间至少一定距离,以便链接可以正常显示?

2
碰撞检测?http://bl.ocks.org/mbostock/3231298 - Josh
@Josh 我已经将 `var q = d3.geom.quadtree(graph.nodes), i = 0, n = nodes.length; while (++i < n) q.visit(collide(graph.nodes[i]));` 添加到我的图表中,但仍然没有变化。 - analyticalpicasso
1
你也可以简单地增加力布局中的“charge”参数,或许将其作为节点类型的函数(这样更大的图标会比较小的图标推开得更多)。然而,考虑到你拥有的链接数量,你可能仍然会有重叠的线条。 - AmeliaBR
@AmeliaBR 谢谢。通过增加电荷,它起作用了。您也可以将您的评论作为答案提供,这样我就可以接受它。因此,对其他人也有好处。 - analyticalpicasso
1个回答

13
有两种方法可以避免d3力导向图中的重叠。
第一种方法是调整力对象的参数,其中最相关的是“charge”参数。具有负“charge”值的节点会将其他节点推开(相对于具有正值的节点会将其他节点拉近),您可以增加电荷量以引起更大的推动作用。
“charge”的默认值为-30,因此您可以在那里进行调整,直到获得所需的效果。没有简单的公式来确定您想要的值,因为它还取决于其他参数和图形中链接的数量。
如果由于任何原因调整电荷不起作用(例如,如果您希望节点紧密聚集在一起 - 不互相排斥 - 但仍然不重叠),则可以手动检查重叠的节点,如Josh在评论中建议的这个Mike Bostock示例

另一个避免重叠的不太明显的示例是 https://bl.ocks.org/mbostock/1062383。 - Fuhrmanator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接