NetworkX获取节点位置

4
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:array([1.,0.]),901:array([0.30901699,0.95105652]),902:array([-0.80901699,0.58778525]),903:array([-0.80901699,-0.58778525]),904:array([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个回答

4
您需要为nx.draw_networkx图形添加pos参数,如下所示。
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 参数的文档,它表示:

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

请注意,上述内容仅供参考。

1
还有一个问题@Mohammed...如果我使用draw_circular而不是nx.draw_networkx,那么我们在上面的截图中看到的x和y轴就不会出现了。有没有办法用draw_circular获得类似的坐标轴呢? - Nishant Sharma

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