如何更新网络图



我想实时更新我的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()

如果你运行这个,你在一个窗口中得到一个图像,然后你必须杀死这个窗口,第二个图像出现在一个新窗口中。我希望它在现有的窗口中更新,而不必与之交互。

你怎么能那样做?

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()

最新更新