【发布时间】:2017-06-05 09:36:49
【问题描述】:
我在 D3 中创建了一个动态构建的力图。当我单击其中一个链接时,我只想显示该链接以及所有连接的链接/节点。
这个 Plunkr 是我所拥有的东西的简化版本:http://plnkr.co/edit/TiKKmvydqXNipe103juL?p=preview(编辑:我已经更新了这个,现在是一个完整的解决方案)。
如您所见,有 3 个独立的“组”连接节点,在我的真实数据集中有数百个节点,我希望能够隔离一个单独的“组”,并且只显示当链接是该组的一部分被点击(它不能是被点击的节点,因为这会显示一个包含更多信息的弹出窗口)。
我已经能够通过预处理我的数据并使用相当复杂且冗长的算法来确定链接是否在同一个连接组中来着色/隐藏连接的链接。
我还可以通过更改dragstart函数来更改被点击的节点或所有节点/链接,这感觉就像我接近了,但我认为它无法识别任何链接关系。
function dragstarted(d) {
if (!d3.event.active) simulation.alphaTarget(0.3).restart();
// Changes all nodes/links
d3.select("circle").classed("others",true).style("display","none");
// Trying different ways to hide only 'other' nodes
d3.selectAll("circle").classed("others",true).style("display","none");
d3.selectAll("line").classed("others",true).style("display","none");
d.fx = d.x;
d.fy = d.y;
}
(我知道这个问题/答案how to highlight(change color) of all connected(neighbours) nodes and links in a d3 force directed graph,但我认为它没有帮助)。
任何帮助将不胜感激。
【问题讨论】:
-
这是我用于类似功能的答案:stackoverflow.com/questions/8739072/…
-
谢谢 我刚刚发布了这个。我也许可以让它合身。
-
我已经使用该帖子中突出显示的方法的实现更新了我的 Plunker,它有点工作,但似乎没有得到正确的链接。我不太明白 - 我已经更新了数据以使 2 个组相同并且单击链接 MN 有效,但单击链接 HI 无效。这很令人困惑,因为它们相对于其他附加节点位于同一个位置。
-
好的,我看到了您的问题,当您单击链接时,它似乎突出显示了您的一个网络中任意选择的链接。而不是整个网络……对吗?我认为您可能需要一个稍微复杂的功能,可能对您的链接进行排序...
-
感谢您的及时回复。是的,我看到了同样的行为。我会看看我是否能想出更好的东西——我实际上已经有了原始帖子中提到的算法,只是看起来太复杂了。我猜想没有办法以任何其他方式链接连接的元素 - 幕后的东西必须知道连接,以便在拖动时它们都保持连接? (或者它们是分开的元素应用了相同的物理原理,这使得它们看起来像是相互连接的?)
标签: d3.js