You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现networkx绘图在同一窗口无需手动交互的实时更新

解决方案

问题本质是matplotlib默认的阻塞绘图模式会导致plt.show()暂停后续代码执行,必须手动关闭窗口才会继续运行。修改以下配置即可实现同一窗口无交互自动更新:

完整可运行代码

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

# 开启交互模式,核心改动
plt.ion()

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")
# 没有dot安装的话替换为下面这行
# pos = nx.spring_layout(T)

# 第一次绘图
nx.draw(T, pos, node_color=colors, edge_color='#909090', node_size=200, with_labels=True)
plt.draw()
plt.pause(1) # 停留1秒,同时触发界面刷新,替代原time.sleep
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.draw()

# 关闭交互模式,让最终窗口常驻不自动关闭
plt.ioff()
plt.show()

关键改动说明

  • 开头调用plt.ion()开启matplotlib交互模式,该模式下所有绘图指令都不会阻塞代码运行
  • 中间更新阶段使用plt.draw() + plt.pause(秒数)替代原有的plt.show() + time.sleep,plt.pause会自动触发界面刷新,同时实现等待效果,避免窗口无响应
  • 所有更新完成后调用plt.ioff()关闭交互模式,再执行plt.show()让最终绘图窗口保持显示,不会自动退出
  • 如果需要多次循环更新,把绘图、暂停、清空画布的逻辑放到循环体内即可

内容的提问来源于stack exchange,提问作者Simd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:54:02