如何更新 networkx 绘图

How to update a networkx drawing

我想实时更新我的​​ networkx 图。我看到了 但它似乎没有帮助或者我误解了它。这是我的 MWE:

import matplotlib.pyplot as plt
import networkx as nx
import pydot
from networkx.drawing.nx_pydot import graphviz_layout
import time

T = nx.balanced_tree(2, 5)

colors = ['r']*len(T.nodes)
for i in range(31):
    colors[i]='y'

pos = graphviz_layout(T, prog="dot")

# Use this instead if you don't have dot installed
# pos = nx.spring_layout(T)

nx.draw(T, pos, node_color=colors, edge_color='#909090', node_size=200, with_labels=True)

plt.show()
time.sleep(1)
plt.clf()

T.remove_edge(3,8)
T.add_edge(3,4)
T.add_edge(7,8)
nx.draw(T, pos, node_color=colors, edge_color='#909090', node_size=200, with_labels=True)
plt.show()

如果你 运行 在 window 中得到一张图片,那么你必须杀死 window 并且第二张图片出现在新的 window 中。我希望它在现有的 window 中更新,而无需与之交互。

你怎么做到的?

plt.clf() 在这种情况下不起作用。当 plt.show() 运行时,它只会等待一个交互来关闭它,它不会改变。
您应该在 plt.show()
之前进行更改和延迟 请改用 plt.pause()

import matplotlib.pyplot as plt
import networkx as nx
import pydot
from networkx.drawing.nx_pydot import graphviz_layout
import time

T = nx.balanced_tree(2, 5)

colors = ['r']*len(T.nodes)
for i in range(31):
    colors[i]='y'

pos = graphviz_layout(T, prog="dot")

# Use this instead if you don't have dot installed
# pos = nx.spring_layout(T)

nx.draw(T, pos, node_color=colors, edge_color='#909090', node_size=200, with_labels=True)

plt.pause(1)   # <------ it will pause for 1 second 

T.remove_edge(3,8)
T.add_edge(3,4)
T.add_edge(7,8)
nx.draw(T, pos, node_color=colors, edge_color='#909090', node_size=200, with_labels=True)

plt.show()