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