如何用Python在同一图中逐次显示循环结果并添加短暂停顿
解决Matplotlib循环实时绘图并停顿的问题
你的代码目前存在几个问题,导致无法在循环中实时更新画面:
- 未开启Matplotlib交互模式,绘图窗口不会实时刷新
plt.figure缺少括号,未实际创建绘图窗口- 每次循环重复绘制信号和高斯窗,画面会不断叠加变得混乱
- 使用
time.sleep无法触发绘图事件,导致画面不更新
下面是修改后的代码,可实现每次迭代后在同一个figure上更新画面并停顿固定时长:
# 导入必要库 import numpy as np import matplotlib.pyplot as plt # 创建信号 L = 10 # 定义域长度 n = 2048 # 采样点数 t = np.linspace(0, L, num=n) # 定义域变量 St = 3*np.sin(2*t) + 1.5*np.sin(5*t) + 6*np.cos(20*t) # 信号 # 创建滑动变量 m = 100 # 迭代次数 tau = np.linspace(0, L, m) # 滑动参数 # 开启交互模式,创建绘图窗口 plt.ion() fig = plt.figure() # 滑动高斯窗并实时绘图 for i in range(len(tau)): # 清除当前轴内容,避免叠加 plt.cla() # 定义滑动高斯窗 tslide = t - tau[i] width = 10 g = np.exp(-(width*tslide)**2) # 绘制信号和滑动窗 plt.plot(t, St, color='k', label='原始信号') plt.plot(t, g, color='r', label='滑动高斯窗') plt.legend() # 添加图例区分两条曲线 plt.ylim(-10, 10) # 固定y轴范围,避免画面跳动 # 刷新绘图并停顿0.1秒 plt.draw() plt.pause(0.1) # 关闭交互模式,保持窗口显示 plt.ioff() plt.show()
关键修改说明:
plt.ion():开启交互模式,允许实时更新绘图plt.cla():每次循环清除当前轴的内容,防止多次绘图叠加plt.draw()+plt.pause(0.1):替代time.sleep,既实现停顿,又能触发绘图窗口刷新plt.ylim():固定y轴范围,避免每次滑动时画面上下跳动,提升视觉效果plt.legend():添加图例,更清晰区分两条曲线
内容的提问来源于stack exchange,提问作者User123
相关产品推荐
相关产品推荐

