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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:40:09