如何让Matplotlib实现类似Matlab的多图即时显示效果?
解决Matplotlib绘图需关闭前一窗口才显示后一窗口的问题
问题核心在于plt.show()默认是阻塞模式,执行到这行代码时程序会暂停,直到关闭当前图形窗口才会继续运行后续代码,所以第二个myplot要等第一个窗口关闭才会执行。下面提供两种接近Matlab plot函数体验的实现方式:
方法一:使用非阻塞式plt.show()
修改plt.show()的block参数为False,让窗口显示后不阻塞程序执行,再配合plt.pause()确保窗口能正常渲染:
import matplotlib.pyplot as plt def myplot(x, y): plt.figure() plt.plot(x, y) plt.show(block=False) plt.pause(0.01) # 给窗口预留渲染时间,避免出现空白窗口 # 调用函数,两个窗口会同时显示 myplot([1, 2, 3], [4, 5, 6]) myplot([1, 2, 3], [4, 5, 6]) # 最后调用一次plt.show()保持所有窗口打开,避免程序结束后窗口自动关闭 plt.show()
方法二:开启Matplotlib交互式模式
Matlab默认是交互式绘图环境,我们可以开启Matplotlib的交互式模式plt.ion(),实现调用绘图函数后即时显示窗口,无需每次调用plt.show():
import matplotlib.pyplot as plt # 开启交互式模式 plt.ion() def myplot(x, y): plt.figure() plt.plot(x, y) plt.draw() # 触发图形绘制,替代每次调用plt.show() # 调用函数,两个窗口会依次弹出并保持显示 myplot([1, 2, 3], [4, 5, 6]) myplot([1, 2, 3], [4, 5, 6]) # 关闭交互式模式,防止程序结束后窗口立即关闭 plt.ioff() # 保持所有窗口显示,直到手动关闭 plt.show()
两种方式对比:
- 方法一适合快速修改现有代码,每次绘图独立控制窗口显示;
- 方法二更贴近Matlab的使用习惯,开启交互后绘图流程更流畅,适合频繁调用绘图函数的场景。
内容的提问来源于stack exchange,提问作者DSP novice
相关产品推荐
相关产品推荐

