<p>为清晰起见,分配<code>G = nx.minimum_spanning_tree(G)</code>。然后</p>
<pre><code>nx.draw(G, with_labels=True)
</code></pre>
<p>相当于</p>
<pre><code>pos = nx.spring_layout(G)
nx.draw(G, pos=pos, with_labels=True)
</code></pre>
<p>由于您不希望每次运行脚本时都随机计算<code>pos</code>,因此保持<code>pos</code>稳定的唯一方法是存储它一次,并在每次重新运行后从文件中检索。您可以将此脚本置于<code>pos</code>之前,以改进的方式计算<code>nx.draw(G, pos=pos, with_labels=True)</code>:</p>
<pre><code>import os, json
def store(pos):
#form of dictionary to be stored dictionary retrieved
return {k: v.tolist() for k, v in pos.items()}
def retrieve(pos):
#form of dictionary to be retrieved
return {float(k): v for k, v in pos.items()}
if 'nodes.txt' in os.listdir():
json_file = open('pos.txt').read()
pos = retrieve(json.loads(json_file)) #retrieving dictionary from file
print('retrieve', pos)
else:
with open('pos.txt', 'w') as outfile:
pos = nx.spring_layout(new_G) #calculates pos
print('store', pos)
json.dump(store(pos), outfile, indent=4) #records pos dictionary into file
</code></pre>
<p>这是一个丑陋的解决方案,因为它无条件地依赖于<code>pos</code>字典中使用的数据类型。这对我来说很有效,但是您可能需要定义在<code>store</code>和<code>retrieve</code>中使用的自定义项</p>