如何更新 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()
我想实时更新我的 networkx 图。我看到了
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()