如何在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
相关产品推荐
相关产品推荐

