Python 向networkx.spring\u布局添加重力

Python 向networkx.spring\u布局添加重力,python,numpy,networkx,Python,Numpy,Networkx,我想在networkx.spring\u布局中添加“重力”的概念。原因是我有一个DAG我想布局和graphviz有很多麻烦。使用spring\u布局的初始实验似乎是积极的,但我希望通过对所有节点施加恒定的力(当然,随着温度的升高,每次迭代都会减少),来确保布局或多或少的稳定。这将有效地在一个方向或另一个方向上“吹”所有节点,根被锚定在一个地方 但是,在开始之前,我想知道这是否是一种实现我想要的功能的好方法。Graphviz有几个用于图形布局的程序,每个程序都适用于某些类型的图形。标准程序用于ne

我想在networkx.spring\u布局中添加“重力”的概念。原因是我有一个DAG我想布局和graphviz有很多麻烦。使用
spring\u布局的初始实验似乎是积极的,但我希望通过对所有节点施加恒定的力(当然,随着温度的升高,每次迭代都会减少),来确保布局或多或少的稳定。这将有效地在一个方向或另一个方向上“吹”所有节点,根被锚定在一个地方


但是,在开始之前,我想知道这是否是一种实现我想要的功能的好方法。

Graphviz有几个用于图形布局的程序,每个程序都适用于某些类型的图形。标准程序用于networkx is
neato
。但是有一个程序更适合于有向图,尤其是DAG-
dot
。只需查看neato的输出:

nx.draw(G,pos=nx.nx_pydot.graphviz_布局(G))

对于
dot
输出:

nx.draw(G,pos=nx.nx\u pydot.graphviz\u布局(G,prog='dot'))

我强烈建议您使用
graphviz\u布局
prog='dot'
。但如果要使用标准
spring\u布局
,则应使用
k
参数。Spring布局,但
k
就是这种布局:

k(float(默认值=None))–节点之间的最佳距离。如果没有,则距离设置为1/sqrt(n),其中n是节点数。增加此值可将节点移动得更远。

您还可以尝试更改
比例

scale(数字(默认值:1))–位置的比例因子。除非“固定”为“无”,否则不使用。

种子
用于确定性图形:

seed(int、RandomState实例或None可选(默认值=None))–为确定性节点布局设置随机状态。如果int,seed是随机数生成器使用的种子,如果numpy.random.RandomState实例,seed是随机数生成器,如果无,则随机数生成器是numpy.random使用的RandomState实例。


这是一个很好的答案,尽管我已经尝试过这些方法。我考虑扩展spring_布局的原因是现有的方法不够。(而且,我已经尝试在这些现有方法上调整了一些参数)。