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

如何在Jupyter Notebook中动态更新Matplotlib散点图(仅显示单图)

在Jupyter Notebook中实现散点图的动态更新

你的问题核心是每次循环调用plt.scatter()会重复绘制新的散点图层,最终生成多个图表或叠加的图层。要实现同一张图的动态更新,这里有两种高效的实现方式:

方法1:交互式模式+清除重绘

开启matplotlib的交互式模式,每次循环清除当前轴的内容后重新绘制,保证始终只有一张图表:

import matplotlib.pyplot as plt

# 开启交互式渲染模式
plt.ion()

x = []
y = []

# 初始化画布和轴对象
fig, ax = plt.subplots()

for i in range(10):
    x.append(i)
    y.append(i**2)
    # 清除当前轴的所有内容
    ax.clear()
    # 重新绘制散点图
    ax.scatter(x, y)
    # 暂停0.1秒让图表完成更新(可调整时长)
    plt.pause(0.1)

# 关闭交互式模式(可选,若需要保持图表显示则执行)
plt.ioff()
plt.show()

方法2:直接更新散点对象数据

创建一个散点对象后,通过修改其数据实现更新,无需重复清除重绘,效率更高:

import matplotlib.pyplot as plt

x = []
y = []

fig, ax = plt.subplots()
# 创建空的散点对象,后续动态更新数据
scatter = ax.scatter(x, y)
# 预设坐标轴范围,避免每次自动调整导致画面跳动
ax.set_xlim(0, 9)
ax.set_ylim(0, 81)

for i in range(10):
    x.append(i)
    y.append(i**2)
    # 将新的坐标数据更新到散点对象中
    scatter.set_offsets(list(zip(x, y)))
    plt.pause(0.1)

plt.show()

注意事项

  • 在Jupyter Notebook中,若遇到显示问题,可以在代码开头添加%matplotlib notebook魔法命令(替代默认的%matplotlib inline),启用交互式后端。
  • 两种方法中plt.pause()是必须的,它会触发图表的渲染更新,否则无法看到动态效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:52:12