问题标签 [d3-force-directed]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
166 浏览

javascript - 强制布局中的 D3 CSS 自定义颜色

我正在研究强制定向布局。当我第一次开始做这个时,我在 CSS 中定义了颜色并且效果很好。在此过程中,我决定尝试内置 D3 色标,但是当我尝试返回自定义 CSS 颜色时,代码不再在没有色标线的情况下运行。不知何故,我被 d3 比例“卡住”了 - 此代码的第 4 行:https ://jsfiddle.net/lilyelle/gwacm7z5/

我知道我的 CSS 正在工作,因为我的指针事件命令正在工作 - 但不知何故,其余的 CSS 不会将颜色应用于我的元素。任何人都可以帮助摆脱 d3 比例并恢复常规 CSS 样式???

谢谢!

0 投票
1 回答
1352 浏览

d3.js - d3-force 在初始化图后更新 forceCollide 的半径

这个问题是对前一个题为“初始化图形后的 D3-Force 更新参数”(初始化图形后的 D3-Force 更新参数)的后续问题,@altocumulus 回答了这个问题。

我试图在修改某些节点的半径后更新模拟力。但是,当我要求forceCollide说明更改时,它不起作用。

该图首先正确启动,使用forceCollide和函数使力与半径相对应:

然后我修改d.radius对象并希望forceCollide反映更改。但是,当我forceCollide再次调用它时它不起作用:

关于为什么会发生这种情况的任何想法?

0 投票
1 回答
1134 浏览

javascript - 搜索后力有向图中的 d3.js 节点位置

目标:在搜索后的查看区域中居中一个节点

我创建了一个力有向图,使用户能够按名称搜索节点。搜索节点时,所选节点保持可见,而所有其他节点暂时降低不透明度以突出显示搜索节点。现在,我还想将搜索到的节点置于查看区域的中心。我尝试了多种方法,但未能成功翻译包括节点标签在内的整个图形。任何帮助将不胜感激。

jsfiddle(注意:从我的脚本运行时自动完成搜索工作得很好,但在 jsfiddle 中似乎失败了):https ://jsfiddle.net/dereksmith5822/73j63nn0/

0 投票
1 回答
806 浏览

geometry - 在 D3.V4 中构建一个节点从内到外排序的力导向同心圆图

我目前正在构建 D3.js 中研究论文之间的关系图。目前我的代码允许我生成一个力导向图。我可以缩放和拖动图表,暂时“丑陋”的工具提示在“鼠标悬停”上显示节点信息(但这与这个问题无关)。

我正在寻找基于出版年份可视化文章网络的最佳方式。我认为最好的方法是按年份以同心圆图案显示节点,如下所示:

同心圆受力图的预期结果的简单表示

在我的代码中的图像中,节点是根据年份着色的。

这是我的 plunk 链接:http ://plnkr.co/edit/RCzGe0OFaQNnI32kBuSn?p=preview

这是我的代码:HTML:

样式.CSS:

测试数据.JSON:

脚本.js:

我想我必须修改刻度函数,以便在每个“年区”内返回 x 和 y 随机坐标,但不知道如何计算。

关于如何做到这一点的任何想法?非常感谢。

笔记:

我找到了在环中生成随机数的答案,该答案也指在圆中均匀地生成随机数:

在环(环)内生成均匀随机点

0 投票
0 回答
229 浏览

javascript - 如何在具有多个父节点的力有向图中按顺序折叠节点?

我正在尝试使力导向图节点崩溃,并且我可以从下面的代码中做到这一点,但这会崩溃所有目标节点,即使直接目标节点与另一个节点有另一个“边”,其中在这种情况下,我希望只能折叠边缘,即隐藏边缘并且目标节点仍然可见,因为它还有另一个父节点仍未折叠。

在下面的示例中,我将“孙子”节点链接到 2 个父“子”节点,现在,如果我折叠(或单击)链接到孙子的任何子节点,则孙子节点及其链接将折叠到父节点中(边缘)。

我正在尝试并且需要让它像它一样工作:当我单击子节点时,而不是将大子节点折叠到其中,我需要检查子节点是否有任何直接父节点,如果是,那么我只在第一次子点击时隐藏边缘,当我点击第二个子父节点时,孙子节点及其边缘会折叠到其中。

0 投票
0 回答
597 浏览

javascript - 如何模拟仅在节点子集上运行的 d3.forceManyBody()?

d3.forceManyBody() 表示它只在每个节点上运行。我希望能够在节点子集上进行操作。具体来说,我想要两种可能性:

  • 将标准多体力(吸引力或排斥力)平等地应用于此节点子集中的所有节点
  • 给定两个节点子集 A 和 B,A 中的所有节点都(吸引/排斥)B 中的每个节点,对任何其他节点没有影响

我怎样才能做到这一点?

想到的一个选择是弄清楚如何使用 d3.forceLink() 来模拟 d3.forceManyBody() 的计算,然后在每个节点和每个其他节点之间创建链接,该链接意味着具有吸引力或排斥力施加的力。如果可以使两者起作用,从数学的角度来看,它可能会起作用,除了性能问题。

想到的另一个选择是将 d3.forceManyBody() 克隆到 d3.forceSelectiveManyBody() 之类的东西中,并对其进行调整,以便在计算过程中为每对节点调用一次 force.strength() 访问器函数。

还有另一个我没有想到的更简单的高性能选项吗?

0 投票
1 回答
123 浏览

javascript - D3 更新 DOM,但没有显示

我正在构建一个力导向图,据我所知,我已经正确编写了代码。这段代码运行后,DOM 看起来完全正确。然而,什么都没有显示。

模拟部分被注释掉,因为我试图让第一部分工作。当我取消注释它时,它只调用一次“滴答”事件,即使处理显然没有完成。JavaScript 控制台中没有任何东西可以解释它。

有关完整代码,请参阅http://jsfiddle.net/jarrowwx/gof5knaj/36/

今天早上我有一些工作,但有些事情发生了变化,现在我所做的一切似乎都不起作用。我查看了 D3 github,最后一次提交似乎是 11 天前,所以这不太可能是由库的更改引起的。

有没有人经历过这样的事情?关于我做错了什么的任何指示?我发现了 D3 错误吗?

0 投票
1 回答
232 浏览

javascript - 让 d3.forceCollide() 的两个实例一起玩得很好

我想要两个d3.forceCollide(). 一方面,每个节点都被推开以防止重叠。在第二种情况下,只有一部分节点被推开,半径更大。

为了完成第二个力量,我调整了初始化方法来过滤传入的节点,如下所示:

现在,这几乎可以工作。我创建了一个小提琴来查看它的实际效果:https ://jsfiddle.net/jarrowwx/0dax43ue/38/ - 每个彩色圆圈都应该从远处排斥所有其他相同颜色的圆圈。所有其他颜色,它只是撞到并把它推开。

如果我不更改定义事物的顺序,则选择性施加的力仅应用于第一种颜色(红色)。如果我在施加力之前对阵列进行洗牌data,则很难准确定义会发生什么,但力会施加到某些圆圈而不是其他大多数圆圈,即使是相同的颜色也是如此。

任何想法这里发生了什么,或者如何解决它?

0 投票
1 回答
1443 浏览

d3.js - 将曲线改为直线

我正在尝试制作一个强制图,此时链接是弯曲的。有谁知道如何将它们更改为直线?

JSBin

0 投票
1 回答
1028 浏览

javascript - d3.js 强制有向图 - 使用图像而不是圆作为节点

我正在尝试使用 d3.js 可视化动态网络拓扑。到目前为止,我可以通过将圆圈作为节点来使其工作,但我必须为不同的节点类型放置不同的自定义图像。

我当前的代码是这样的:

首先,我想将图像放到所有节点上,看看它是如何工作的,如下所示:

它似乎没有以这种方式工作,因为我只能看到链接,并且节点刚刚消失。我发现了一些使用 d3 v3 的示例,但目前我正在使用 d3 v4 并希望相应地实现它(因为我遇到了 forceLink() 不包含在 v3 中的问题)

提前致谢。