Javascript d3.js链接强度对力图中链接距离的影响

Javascript d3.js链接强度对力图中链接距离的影响,javascript,d3.js,force-layout,Javascript,D3.js,Force Layout,我正在制作一个图表来显示不同节点之间的关系。节点之间的关系越密切(根据业务逻辑),节点之间的关系就越密切 我注意到一些链接的链接强度为.1的链接较短(这是我想要实现的),而其他一些链接强度相同的链接则比链接强度为1的链接长。从有关force layout parameters的文档中,我现在找到了以下引用: 默认的linkStrength值为1.0,这将保持linkDistance的全部效果。但是,通过将linkStrength的值设置为小于1,可以放松距离约束 这是否意味着如果我将linkDi

我正在制作一个图表来显示不同节点之间的关系。节点之间的关系越密切(根据业务逻辑),节点之间的关系就越密切

我注意到一些链接的
链接强度
.1
的链接较短(这是我想要实现的),而其他一些链接强度相同的链接则比
链接强度
1
的链接长。从有关force layout parameters的文档中,我现在找到了以下引用:

默认的linkStrength值为1.0,这将保持linkDistance的全部效果。但是,通过将linkStrength的值设置为小于1,可以放松距离约束


这是否意味着如果我将
linkDistance
设置为
150
,则
linkStrength(1.0)
的链接将比
linkStrength(.1)
的链接更接近150?如果是的话,它们需要更短、更长还是根本不重要?因为我对布局有点惊讶。

链接强度决定了链接的刚度,而不是节点之间的距离()。节点之间的距离由其电荷控制。您可以使节点的费用动态变化,如下所示:

var force = d3.layout.force()
        .nodes(nodes)
        .theta(0.1)
        .charge(function (d) {
            return -(d.radius * d.radius * 0.125);
        })
        .gravity(0.1)
        .size([width, height])
        .on("tick", tick)
        .start();

使用此技术的一个工作示例:

简而言之:当使用D3的强制布局时,并没有内置的方法来强制执行固定长度的链接。“力”布局本质上是动态的,在“力”布局运行时,为每次迭代(即每次勾选)执行的计算集引入另一个力,并设置值

在每个轴上计算三个力:

1要计算的第一个力是通过上述方法设置的连杆长度调整。这是在每个链接的循环中完成的,从源代码看,这基本上归结为代码的类型:

l
计算为链接的源节点和目标节点之间的欧几里德距离时,所需的链接距离
距离[i]
和链接的
强度[i]
这条线确定如何将两个节点拉到一起或分开,以近似通过
force.linkDistance()设置的链接距离
。很容易看出,连杆强度对产生的力有线性影响。不过,与API文档相反,API文档定义了间隔[0,1]内强度的有效范围,源代码没有对
force.linkStrength()
设置的值施加任何限制

2要计算的第二个力将在每个节点上考虑在内

3最后,计算节点的相互作用力

由于所有计算力的影响都是叠加的,并且将叠加到每个节点在给定记号的最终移动中,因此很明显,链接长度只是整个计算的一部分。其他两种力量可能削弱甚至逆转其影响

至于你的问题

这是否意味着如果我将linkDistance设置为150,则具有linkStrength(1.0)的链接将比具有linkStrength(.1)的链接更接近150


结果在很大程度上取决于强制布局参数的设置和节点的分布,仍然无法保证链路的最终长度。

我不完全确定您关于距离的说法是否正确,但我倾向于说是的。我确信,当连接强度变小时,节点电荷和力图的“重力”对边缘的影响更大。这些节点根据它们的电荷相互吸引或排斥。您能为v4更新此语法吗?我这里有一个相关的问题
l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;