d3力导向图增加节点_在D3力导向图中突出显示所选节点,其链接及其子节点

在D3.js的力导向图中,作者探讨了如何在鼠标悬停时高亮显示特定节点、其链接以及子节点。通过淡出所有其他元素并确保与悬停节点相连的节点和链接保持高亮,实现视觉焦点。然而,遇到的问题是在尝试改变链接目标或源节点的不透明度时出现TypeError。作者寻求优化解决方案,以避免遍历所有节点,保持良好的性能。

在D3力导向图中突出显示所选节点,其链接及其子节点

我正在研究D3中的力导向图。我想通过将所有其他节点和链接设置为较低的不透明度来突出显示鼠标悬停节点,其链接及其子节点。

在这个例子中,http://jsfiddle.net/xReHA/,我能够淡出所有的链接和节点然后淡化连接的链接,但是,到目前为止,我还没有能够优雅地淡化连接的节点,它们是当前鼠标悬停节点的子节点。

这是代码中的关键功能:function fade(opacity) {

return function(d, i) {

//fade all elements

svg.selectAll("circle, line").style("opacity", opacity);

var associated_links = svg.selectAll("line").filter(function(d) {

return d.source.index == i || d.target.index == i;

}).each(function(dLink, iLink) {

//unfade links and nodes connected to the current node

d3.select(this).style("opacity", 1);

//THE FOLLOWING CAUSES: Uncaught TypeError: Cannot call method 'setProperty' of undefined

d3.select(dLink.source).style("opacity", 1);

d3.select(dLink.target).style("opacity", 1);

});

};}

Uncaught TypeError: Cannot call method 'setProperty' of undefined当我尝试在从source.target加载的元素上设置不透明度时,我收到错误。我怀疑这不是将该节点作为d3对象加载的正确方法,但我找不到另一种方法来加载它而不再遍历所有节点以找到与链接的目标或源匹配的节点。为了保持性能合理,我不希望迭代超过所有节点。

78af9cf8adfc2b16dce5ba1ce03094df.png

但是,这并未显示如何更改已连接的子节点。

任何有关如何解决或改善这一点的好建议都将被激烈地推崇:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值