force-layout - 使用多个连接组件时,D3 强制 v3 和 v4 之间的布局差异

标签 force-layout d3.js

MWE

我试图用两个版本创建相同的图表,这里是 Bl.ocks:

这些例子改编自one官方例子。

问题

当有多个连通分量时,就会出现差异。在版本 4 中,有两件事对我来说特别不起作用:

  1. 拖动一个连接的组件会使其他组件以一种非常非物理的方式围绕(我猜)力中心疯狂平移;

  2. 在鼠标按下时(即使没有实际移动)其他连接的组件无限期地移动,最终离开屏幕。

简而言之,第 3 版中的图牢不可破,无论您如何处理节点,它们最终都会回到稳定的位置。

如何修复这两种行为,使模拟更类似于版本 3?

最佳答案

您不需要 d3.forceCenter。如果您查看 API :

The centering force translates nodes uniformly so that the mean position of all nodes (the center of mass if all nodes have equal weight) is at the given position ⟨x,y⟩

这意味着,当您将一个节点移离中心时,其他节点将向相反方向移动,以补偿移动,因此质心保持在同一位置。

相反,使用 forceXforceY:

The x- and y-positioning forces push nodes towards a desired position along the given dimension with a configurable strength.

所以,这是模拟:

const simulation = d3.forceSimulation()
     .force('link', d3.forceLink().distance(200))
     .force('charge', d3.forceManyBody())
     .force('centerX', d3.forceX(width / 2))
     .force('centerY', d3.forceY(height / 2));

这是一个更新的 fiddle :https://jsfiddle.net/ahdbLL8a/

关于force-layout - 使用多个连接组件时,D3 强制 v3 和 v4 之间的布局差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40694131/

相关文章:

javascript - D3.js 图片在 Angular 落问题

javascript - d3.json() 和 JSON.parse() 产生相同的结果吗?

javascript - 如何在力导向图中绘制线/边?

javascript - 重绘简单图形

javascript - D3强制布局应在单击节点时添加节点和链接

d3.js - D3 力布局图 - 自链接节点

javascript - d3.js 点击事件显示/隐藏 html 元素

javascript - 另一个D3向强制有向图添加文本

javascript - 鼠标悬停事件未在 xhtml 元素上触发 - d3.js

javascript - 如何设置x轴和y轴的交点