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

如何在Jupyter中循环绘制时间序列片段,等待用户输入后再绘下一段?

解决Jupyter Notebook中逐段绘图并等待输入的问题

问题原因

Jupyter Notebook的单元格执行机制是代码块全部执行完毕后才统一渲染输出内容,包括Matplotlib图形。因此plt.show()无法实时弹出图形,必须等所有输入完成后才会一次性显示所有绘图结果。

解决方案

使用IPython的display模块强制实时显示图形,同时配合清理输出和关闭图形的操作,修改后的代码如下:

from IPython.display import display, clear_output
import matplotlib.pyplot as plt

segments = segments.iloc[0:5]
input_list = []  # 避免用内置类型名`list`作为变量名

for idx, row in segments.iterrows():
    f, ax = plt.subplots()
    ax.plot(time, yy)
    # 注意:使用当前循环行的时间范围,原代码取整列值会导致xlim设置错误
    plt.xlim([row.start_time, row.end_time])
    
    # 强制实时显示当前图形
    display(f)
    
    # 获取用户输入
    a = input("输入内容后回车继续:")
    input_list.append(a)
    
    # 清除当前输出,避免下一段图形叠加
    clear_output(wait=True)
    # 关闭当前图形释放内存
    plt.close(f)

关键说明

  • display(f):直接将当前创建的Figure对象实时输出到Notebook,绕过默认的延迟渲染机制。
  • clear_output(wait=True):清除单元格当前输出区域,wait=True确保新内容准备好后再清除,避免画面闪烁。
  • plt.close(f):关闭已显示的图形,释放内存,防止长时间循环导致内存占用过高。
  • 修正原代码中xlim的错误:原代码使用segments.start_time取整列数据,应改为row.start_time获取当前循环行的时间范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:21:00