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

在Jupyter Notebook中能否向已有Axes添加新绘图?

为何Jupyter跨单元格无法在同一Axes显示多个图形?

问题原因

这是Jupyter的单元格执行机制和Matplotlib默认后端的特性共同导致的:

  • %matplotlib inline后端的自动重置
    默认启用的inline后端,会在每个单元格执行完成后自动渲染当前绘图,并重置绘图上下文(相当于隐性执行了清除当前Figure/Axes的操作)。你在第一个单元格创建的ax对象,到第二个单元格执行时,已经和当前活跃的绘图环境解绑,后续对该ax的绘图操作不会被渲染显示。
  • 独立单元格的状态隔离
    Jupyter的每个单元格是独立执行的,除非你显式保留并复用同一个Figure和Axes对象,否则新单元格的绘图命令会默认创建新的绘图对象,而非复用之前的。

解决方法

  • 切换交互式后端
    在第一个单元格执行%matplotlib notebook(或%matplotlib widget,更现代的版本),这个后端支持跨单元格更新同一绘图对象,后续直接调用之前创建的ax绘图即可生效。
  • 显式控制渲染
    若坚持使用inline后端,在第一个单元格创建fig, ax = plt.subplots()后,后续单元格绘图完成时,手动执行fig.canvas.draw()强制更新渲染。
  • 避免销毁绘图对象
    不要在中间单元格执行plt.clf()、plt.close()这类清除命令,防止已创建的Axes对象被销毁。

示例代码

单元格1:

%matplotlib notebook
import matplotlib.pyplot as plt
# 创建全局的Figure和Axes对象
fig, ax = plt.subplots()
# 绘制第一个图形
ax.plot([1,2,3], [2,4,6])

单元格2:

# 在同一Axes上绘制第二个图形
ax.scatter([1,2,3], [6,4,2], color='red')
# 强制更新渲染
fig.canvas.draw()

实际效果:仅显示最后一个单元格的绘图
预期效果:同一Axes上同时显示折线和散点图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:07:21