【问题标题】:Hide all but selected connected nodes in D3 (v4) force graph在 D3 (v4) 力图中隐藏所有但选定的连接节点
【发布时间】: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


【解决方案1】:

好的,这可能超出了我的范围,但我认为您需要以某种方式将链接分组到与节点相同的组中。如果您可以以某种方式将源节点的“组”属性添加到链接中,那么当您单击链接时,可能会出现这样的情况:

d3.selectAll("line")function fade(){if 
(group = "selected", "opacity" = 1)
else
("opacity" = 0)
};

或者,如果您可以在加载数据之前(在您的 PHP 等脚本中)将链接分组,那么您可以附加 3(或 n)组带有单独类的行。

抱歉,JS 不是我的强项,希望有经验的人为我们解决这个问题...

【讨论】:

  • 这正是我最终所做的。我的数据来自外部来源,并使用 D3 预处理为所需的 JSON 对象。我正在向线条、圆形和文本节点添加组属性。我基本上在做的是,获取链接的源/目标字符串,遍历它们并将它们添加到现有组中,或者如果现有组中不存在链接的任一端,则创建一个新组。生成的 JSON 具有每个链接和节点的组号。这是一个更新的 plunker plnkr.co/edit/TiKKmvydqXNipe103juL?p=preview
猜你喜欢
  • 1970-01-01
  • 2017-11-12
  • 2012-02-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2015-07-30
  • 2019-04-23
相关资源
最近更新 更多