<p>默认情况下,<a href="https://networkx.github.io/documentation/latest/reference/generated/networkx.drawing.nx_pylab.draw.html#networkx.drawing.nx_pylab.draw" rel="noreferrer">^{<cd1>}</a>使用spring布局。相反,您可以使用参数<code>pos</code>提供自己的位置。这实际上很简单,因为给定<code>networkx.grid_2d_graph</code>的节点标签实际上是一个(行,列)元组:</p>
<pre><code>>>> G=nx.grid_2d_graph(2,2)
[(0, 1), (1, 0), (0, 0), (1, 1)]
</code></pre>
<p>因此,可以使用节点的名称作为其位置。所以您只需要创建一个字典映射节点到它们自己,并将其作为位置传递。在</p>
^{pr2}$
<p>但是,由于您还想添加节点标签,所以应该使用<a href="https://networkx.github.io/documentation/latest/reference/generated/networkx.drawing.nx_pylab.draw_networkx.html#networkx.drawing.nx_pylab.draw_networkx" rel="noreferrer">^{<cd4>}</a>,它将自定义标签的字典作为可选参数。您需要一个字典将节点映射到它们的新标签。由于NetworkX在默认情况下为每个节点提供了标签(行、列),所以我们只需用row*10+column标记每个节点:</p>
<pre><code>labels = dict( ((i, j), i * 10 + j) for i, j in G.nodes() )
</code></pre>
<p>将其组合在一起,您将得到以下代码,该代码将生成以下图表:</p>
<pre><code>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()
</code></pre>
<p><a href="https://i.stack.imgur.com/xuaUT.png" rel="noreferrer"><img src="https://i.stack.imgur.com/xuaUT.png" alt="plot"/></a></p>
<p><strong>编辑</strong></p>
<p>根据@abdallahsobey的建议,我们可以从左到右和从上到下标记节点。在</p>
<pre><code>labels = dict( ((i, j), i + (N-1-j) * 10 ) for i, j in G.nodes() )
</code></pre>
<p><a href="https://i.stack.imgur.com/O2yUu.png" rel="noreferrer"><img src="https://i.stack.imgur.com/O2yUu.png" alt="better-labeled-plot"/></a></p>