networkx获取节点位置

时间:2018-06-25 18:35:00

标签: python-3.x networkx

import networkx as nx
%matplotlib inline
import matplotlib.pyplot as plt

G2=nx.DiGraph()
G2.add_node(900,pos=(0,0))
G2.add_node(901,pos=(1,0))
G2.add_node(902,pos=(0,1))
G2.add_node(903,pos=(1,1))
G2.add_node(904,pos=(0,-1))

nodePos = nx.circular_layout(G2)
print("nodePos : \n" , nodePos)

nx.draw_networkx(G2, with_labels = True)
plt.show()

上面的代码创建带有节点位置的下图:

enter image description here

nodePos:

{900:数组([1.,0.]),901:数组([0.30901699,0.95105652]),902:数组([-0.80901699,0.58778525]),903:数组([-0.80901699,-0.58778525 ]),904:数组([0.30901699,-0.95105652])}

问题:

a)节点900的位置为0、0,但此节点的x似乎大于0.8 ...类似地,904的y被指定为-1,但是坐标系在任何地方都没有显示-1。

b)nx.circular_layout()应该返回节点的位置,这就是我在nodePos中打印的内容。但是,我不理解nodePos中打印的值。为什么我看到十进制值,也看到负值。

c)我的目的是获取节点的正确位置,以便可以使用它并最终在Qt / Java等环境中绘制图形。...

1 个答案:

答案 0 :(得分:1)

您需要为pos图添加nx.draw_networkx参数,像这样

import networkx as nx
%matplotlib inline
import matplotlib.pyplot as plt

G2=nx.DiGraph()
G2.add_node(900,pos=(0,0))
G2.add_node(901,pos=(1,0))
G2.add_node(902,pos=(0,1))
G2.add_node(903,pos=(1,1))
G2.add_node(904,pos=(0,-1))

nodePos = nx.circular_layout(G2)
print("nodePos : \n" , nodePos)
#('nodePos : \n', {904: array([1.00000000e+00, 2.38418583e-08]),
# 900: array([0.30901696, 0.95105658]), 901: array([-0.80901709,  0.58778522]),
# 902: array([-0.80901698, -0.58778535]), 903: array([ 0.30901711, -0.95105647])})

nx.draw_networkx(G2, with_labels = True,pos=nodePos)
plt.show()

enter image description here

您可以阅读pos争论here的文档,其中指出

  pos(字典,可选的)–字典,其中节点作为键,位置作为值。如果未指定,将计算弹簧布局位置。