You need to enable JavaScript to run this app. Jupyter Lab 3中用Matplotlib实现不清理输出的动态实时绘图
优惠活动
大模型
产品
解决方案
定价
更多

Jupyter Lab 3中用Matplotlib实现不清理输出的动态实时绘图

Jupyter Lab 动态实时绘图实现方案

核心配置(解决%matplotlib widget模式不实时渲染的问题)

替换魔术命令后,绘图仅在循环全部结束才显示的核心原因是ipympl的前端扩展未完成匹配安装,完整配置步骤如下:

  • 安装适配当前Jupyter Lab版本的ipympl库:pip install ipympl
  • 安装对应版本的前端扩展:jupyter labextension install @jupyter-widgets/jupyterlab-manager ipympl
  • 完全停止当前运行的Jupyter Lab服务进程,重新启动服务(仅刷新页面无法加载扩展更新)

可直接运行的实现代码

配置完成后,不需要执行任何清空输出的操作,即可实现逐帧更新绘图、同时保留tqdm进度条等其他输出内容的效果,逻辑和原Jupyter Notebook中的动态绘图方案完全兼容,仅替换绘图后端的魔术命令:

%matplotlib widget

import numpy as np
import matplotlib.pyplot as plt
import time
from tqdm.notebook import tqdm

def pltsin(ax, colors=['b']):
    x = np.linspace(0,1,100)
    if ax.lines:
        for line in ax.lines:
            line.set_xdata(x)
            y = np.random.random(size=(100,1))
            line.set_ydata(y)
    else:
        for color in colors:
            y = np.random.random(size=(100,1))
            ax.plot(x, y, color)
    # 仅触发当前画布的重绘,不影响其他输出区域
    fig.canvas.draw()

fig,ax = plt.subplots(1,1)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_xlim(0,1)
ax.set_ylim(0,1)

# 循环内同步运行tqdm进度条,验证输出不会被清空
for f in tqdm(range(5)):
    pltsin(ax, ['b', 'r'])
    time.sleep(1)

关键注意点

  • 实现过程中禁止调用IPython.display.clear_output(),这类操作会清空整个单元格的所有输出内容,无法满足保留其他输出的需求
  • 若仍出现绘图延迟到循环结束才显示的问题,可运行matplotlib.get_backend()确认当前后端是否为module://ipympl.backend_nbagg,返回值不符说明后端未加载成功,可检查ipympl与Lab扩展的版本匹配性,完成匹配后重启服务重试
  • 这套实现的绘图更新是增量触发的,tqdm进度条、print文本、表格等其他输出内容都会正常保留在原位置,不会被绘图更新操作覆盖或清除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 02:15:04