如何在d3的力导向图中获取相同的节点位置

5
我想创建一个力导向图,但每次生成时都需要保持相同(使用相同的数据)。 是否有使用d3.js实现此目的的方法?
更新: 我找到了可行的解决方案,它基于使用种子随机数生成器
// set the random seed
Math.seedrandom('mySeed');

你的意思是设置节点的位置吗? - AJ_91
您可以像通常那样(即非确定性地)使用数据设置力导向布局,然后通过 console.log() 提取结果位置,并将这些位置保存到要加载的数据文件中。有关更多信息和示例链接,请查看 此答案 - meetamit
@AJ_91 我需要“力导向图”来设置节点的位置,使得它们的位置能够反映它们之间的关系,但是在生成下一个图形后我需要大致相同的位置。 - otter
@meetamit 谢谢,我之前稍微研究了一下那个选项,但我想先尝试驯服力导向布局 :) 抱歉我忘记提到了。 - otter
1个回答

2
你可以通过修改D3的力导向布局或创建基于它的自己的布局来实现。在节点定位中至少有三个地方使用了随机性(Math.Random),(鉴于力导向布局引用其他代码,可能还有更多)。为了使图形每次都以相同的方式显示,你必须消除所有随机性:

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

然而,这将妨碍布局的工作方式——它使用随机性来快速将自己整理成可读的图表。如果您的节点数量很少,那么可能不是问题,但是大量的节点可能会变成一团乱麻。

4
谢谢Katherine的建议,它促使我去寻找JavaScript中的种子随机数生成器,并用此链接替换所有随机函数似乎可以很好地完成工作。 - otter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接