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

Jupyter Notebook多绘图单元格交互与独立显示问题求助

解决方案

核心问题是matplotlib默认会复用当前的Figure对象,导致后续绘图覆盖之前的交互式图。通过显式创建独立的Figure对象,并配合后端切换,可以完美满足你的需求:

第一个单元格(交互式可缩放图)

使用nbagg后端,显式创建专属的Figure和Axes,确保后续绘图不会复用这个对象:

%matplotlib nbagg
from skimage import data, io
from skimage.draw import disk
import numpy as np
import matplotlib.pyplot as plt

# 创建独立的交互式Figure
fig_interactive, ax_interactive = plt.subplots()
img = data.checkerboard()
ft = np.abs(np.fft.fftshift(np.fft.fft2(np.fft.ifftshift(img))))
ft[ft.shape[0]//2, ft.shape[1]//2] = np.mean(ft)
ax_interactive.imshow(ft)
plt.show()  # 显式触发交互式图的渲染

后续单元格(静态独立图)

切换到inline后端,同样显式创建新的Figure和Axes,确保图在当前单元格独立显示:

%matplotlib inline
# 新建静态专属Figure,完全独立于之前的交互式图
fig_static, ax_static = plt.subplots()
row, col = 96, 104
rr, cc = disk((row, col), 7)
mask = np.zeros_like(img)
mask[rr, cc] = 1
ax_static.imshow(ft * mask)
plt.show()

为什么这样有效?

  • 显式创建fig, ax对,强制每个图使用独立的Figure实例,彻底避免默认复用的问题。
  • 第一个单元格的交互式Figure会被nbagg后端保留在原单元格,始终可操作;后续单元格的静态Figure会在各自单元格生成,互不干扰。
  • 执行「重启并运行全部」时,每个单元格的Figure会依次独立渲染,所有图都会完整显示,不会只保留最后一张。

额外注意事项

  • 不要省略plt.subplots()创建独立Figure的步骤,依赖plt.imshow()默认使用当前Figure是导致覆盖的根本原因。
  • 如果需要更多后续图,每个单元格都重复「新建Figure + 绘图 + plt.show()」的流程即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 03:45:57