【问题标题】:How to get the same node positions in d3's force layout graph如何在 d3 的力布局图中获得相同的节点位置
【发布时间】:2015-04-23 13:50:08
【问题描述】:

我想创建一个力有向图,但我需要它在每次生成时都保持不变(使用相同的数据)。 有没有办法使用 d3.js 做到这一点?

更新:

找到working solution,是基于使用seeded random number generator

// set the random seed
Math.seedrandom('mySeed');

【问题讨论】:

  • 你的意思是设置节点的位置?
  • 您可以以通常的方式(即非确定性)使用您的数据设置强制导向布局,然后通过console.log()'ing 提取结果位置,然后将这些位置保存到您加载的数据文件。 See this answer 了解更多信息和示例链接。
  • @AJ_91 我需要力导向图来设置节点的位置,因此位置将反映它们的关系,但在另一代图之后我需要大致相同的位置。
  • @meetamit 谢谢,我之前研究过这个选项,但我想先尝试驯服强制布局:) 对不起,我忘了提..

标签: javascript d3.js force-layout


【解决方案1】:

您可以通过修改 D3 的力布局,或基于它创建自己的布局。至少有 3 个地方使用随机性 (Math.Random) 来定位节点(可能还有更多,因为力布局参考了其他代码)。您必须消除所有随机性才能使图表每次都以相同的方式显示:

https://github.com/mbostock/d3/blob/master/src/layout/force.js

但是,这会妨碍布局的工作方式——它使用随机性将自己快速整理成清晰的图表。如果您的节点数量很少,那么它可能不会成为问题,但大量节点可能最终会导致混乱。

【讨论】:

  • 谢谢凯瑟琳,你的建议让我搜索了用于 javascript 的种子随机数生成器,并用这个 link 替换所有随机函数似乎做得很好
猜你喜欢
  • 1970-01-01
  • 2014-10-27
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 2018-05-12
相关资源
最近更新 更多