如何获取NetworkX绘制网络时节点的x、y坐标numpy数组?
获取NetworkX图节点位置的Numpy数组
完全可以实现!其实nx.draw_networkx内部会调用布局算法(默认是弹簧布局spring_layout)来计算节点位置,你只需要直接调用对应的布局函数拿到位置字典,再按节点顺序提取转成Numpy数组就行,步骤很简单:
具体实现代码
import networkx as nx import numpy as np # 生成你需要的图 a = nx.barabasi_albert_graph(10, 2) # 获取节点位置字典:key是节点编号,value是(x,y)坐标 # 这里用spring_layout和draw_networkx默认布局一致,也可以换成其他布局比如circular_layout pos = nx.spring_layout(a) # 按节点编号从小到大提取位置,转成Numpy数组 # 因为Barabasi-Albert生成的节点是0~9的整数,sorted后就是顺序排列的节点 node_pos_array = np.array([pos[node] for node in sorted(a.nodes())]) # 输出结果,每个元素对应节点0、1...9的位置(如果要对应1~10,只需要把节点编号理解为1-based即可) print(node_pos_array)
补充说明
- 如果你需要其他布局(比如环形布局、随机布局),只需要把
nx.spring_layout换成对应的函数,比如nx.circular_layout(a)、nx.random_layout(a)就行,这些布局函数都会返回同样格式的位置字典。 - 如果你图中的节点是1-based编号(比如节点从1开始),只需要把
sorted(a.nodes())换成range(1, len(a.nodes())+1)(确保按1到n的顺序提取)。 - 这个数组的顺序完全对应节点编号的升序,第一个元素是编号最小的节点位置,以此类推,完美匹配你需要的
[(-0.24,-0.22),(-0.15,0.1),...]格式。
内容的提问来源于stack exchange,提问作者NicolaiF
相关产品推荐
相关产品推荐

