默认情况下,
networkx.draw使用弹簧布局.相反,您可以使用参数pos提供自己的位置.这实际上非常简单,因为给出networkx.grid_2d_graph的节点标签实际上是(行,列)元组:
>>> G=nx.grid_2d_graph(2,2)
[(0, 1), (1, 0), (0, 0), (1, 1)]
因此,您可以使用节点的名称作为其位置.所以你只需要创建一个字典映射节点给自己,并将其作为位置传递.
pos = dict( (n, n) for n in G.nodes() )
但是,由于您还想添加节点标签,因此应使用networkx.draw_networkx,它将自定义标签的字典作为可选参数.您需要将节点映射到其新标签的字典.由于NetworkX默认为每个节点提供标签(行,列),因此我们只需用行* 10列标记每个节点:
labels = dict( ((i, j), i * 10 + j) for i, j in G.nodes() )
将所有内容放在一起,您将获得以下代码,生成下图:
import networkx as nx
import matplotlib.pyplot as plt
N = 10
G=nx.grid_2d_graph(N,N)
pos = dict( (n, n) for n in G.nodes() )
labels = dict( ((i, j), i * 10 + j) for i, j in G.nodes() )
nx.draw_networkx(G, pos=pos, labels=labels)
plt.axis('off')
plt.show()
编辑
使用@AbdallahSobehy的建议,我们可以从左到右,从上到下标记节点.
labels = dict( ((i, j), i + (N-1-j) * 10 ) for i, j in G.nodes() )