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

