Javascript D3.js力布局网络阈值函数中的链接笔划宽度

Javascript D3.js力布局网络阈值函数中的链接笔划宽度,javascript,d3.js,Javascript,D3.js,我目前正在使用D3库进行网络可视化,更准确地说是部队布局 我在这里使用Simon Raper提供的函数: 在我的网络上应用动态阈值 但是我注意到一个问题,当阈值改变时,网络的笔划宽度显示不正确。即使在Raper先生的例子中,你也可以看到链接的笔划宽度会无缘无故地改变 快速查看控制台,我发现值是正确的,网络的形状也是正确的,只是链接笔划宽度的显示是错误的。这似乎是一个索引问题,因为错误的值不是随机的,而是对应于其他链接 我能找到的最好办法就是替换: link=link.data(graph.li

我目前正在使用D3库进行网络可视化,更准确地说是部队布局

我在这里使用Simon Raper提供的函数:

在我的网络上应用动态阈值

但是我注意到一个问题,当阈值改变时,网络的笔划宽度显示不正确。即使在Raper先生的例子中,你也可以看到链接的笔划宽度会无缘无故地改变

快速查看控制台,我发现值是正确的,网络的形状也是正确的,只是链接笔划宽度的显示是错误的。这似乎是一个索引问题,因为错误的值不是随机的,而是对应于其他链接

我能找到的最好办法就是替换:

link=link.data(graph.links);

在重新启动功能中

笔划宽度的链接现在是正确的,但这样做时,链接有时会不可见

如果有谁对D3库更有经验,我将不胜感激;)

应该是:

link.data(force.links(), function(d){return d.source + "-" + d.target; });
没有
d.source.name
d.target.name

工作代码

编辑

在滑动门槛时。 出现节点过滤,这就是链接未显示的原因

function threshold(thresh) {
    //clearing up links
    graph.links.splice(0, graph.links.length);
    //only selecting and pushing links with value > threshold.
        for (var i = 0; i < graphRec.links.length; i++) {
            if (graphRec.links[i].value > thresh) {graph.links.push(graphRec.links[i]);}
        }
    restart();
}
功能阈值(阈值){
//清理链接
图链接拼接(0,图链接长度);
//仅选择和推送值>阈值的链接。
对于(var i=0;ithresh){graph.links.push(graphRec.links[i]);}
}
重启();
}

谢谢您的回复,但您的代码不起作用。将阈值移动到2以上后,90%的链接将消失。还有:link=link.data(graph.links,函数(d){returnd.source+“-”+d.target;});而不是link.data(force.links(),函数(d){return d.source+“-”+d.target;});查看上面的“编辑”部分…这将解释链接在滑动时消失的原因。我已经知道它是如何工作的:),但是如果仔细观察网络,您会发现一些节点已连接,但链接不可见。通过查看节点的移动方式,您可以快速看到它们应该连接,但链接不显示。例如,当阈值为4-5时,您可以看到一些节点在中心保持分组,但它们的链接不可见,并且我已经检查了它们的值,它们应该是连接的。编辑:尝试移动它们,你会明白我的意思,它们是连接的。我认为这解决了重新启动块中选择不正确的问题。因此,重启函数应该有'link=svg.selectAll(“.link”);node=svg。选择全部(“.node”);`请让我知道,如果这是你的意图,我会更新我的答案。谢谢:)现在所有的链接都显示出来了,但是它们的笔划宽度不正确。与这里的问题相同:当您更改阈值时,笔划宽度在两个节点之间发生变化,但不应该发生变化,因为连接值永远不会改变。这是我最初遇到的真正问题。
function threshold(thresh) {
    //clearing up links
    graph.links.splice(0, graph.links.length);
    //only selecting and pushing links with value > threshold.
        for (var i = 0; i < graphRec.links.length; i++) {
            if (graphRec.links[i].value > thresh) {graph.links.push(graphRec.links[i]);}
        }
    restart();
}