d3.js-将链接大小设置为强制布局

d3.js-将链接大小设置为强制布局,d3.js,force-layout,D3.js,Force Layout,基于Michael Bostock的“分子”示例,可从以下url获得: 我试图用几个值设置链接的大小。为此,我禁用了“重力”,在“电荷”中添加了一个重要的负值,并将第一个节点固定在窗口的中心 var force = d3.layout.force() .size([width, height]) .charge(-800) .friction(0.45) .linkStrength(1) .gravity(0) .linkDistance(func

基于Michael Bostock的“分子”示例,可从以下url获得:

我试图用几个值设置链接的大小。为此,我禁用了“重力”,在“电荷”中添加了一个重要的负值,并将第一个节点固定在窗口的中心

var force = d3.layout.force()
    .size([width, height])
    .charge(-800)
    .friction(0.45)
    .linkStrength(1)
    .gravity(0)
    .linkDistance(function(d) { 
        return radius(d.target.size * 10);
     });
我的问题是()有时链接的大小是不同的,特别是对于定义了一点值的链接

有人知道解决我问题的好办法吗


您可以在这里看到我的代码:

链接的长度是可变的,这是force布局的一个特点——关键是节点是自动布局的,您不必担心。您可以实施检查,确保距离始终是您想要的,但这将非常困难


您已经使用的
linkDistance
函数是(弱)强制执行此类约束的唯一直接方法。如果这还不够的话,就没有简单的方法来缓解它。您唯一的选择是在模拟的每个刻度处执行我上面提到的检查。

我想当您修改您使用的函数时,它已经有了一些帮助,同时也考虑了两端对象的大小。让解决方案针对设置两个对象之间的“可见”距离进行优化:例如,沿着(d.source.size+d.target.size)+所需的_距离的直线。你能给我举个例子吗?我不知道有这样的例子。这将是相当复杂的实现,我认为没有人做过。好的,谢谢。你认为如何为每个节点施加一个斥力?这并不能保证所有的距离都是你想要的。你必须手动检查。