任务:我正在做一些分析,需要几张图。第一个必须是可调整大小和可缩放的。根据我在这一图中看到的内容,我在新单元格中绘制了其他图。这些情节不一定需要互动。重要的是: 1-能够随时查看并处理第一个图, 2-可视化单元格中的其他图,以及 3-能够运行“重新启动并运行全部”
我尝试了
%matplotlib nbagg
第一个情节。这样,当我逐个单元运行代码时,第一个图确实是交互式的。但是,当运行下一个绘图单元格时,其他绘图将在第一个单元格中显示,覆盖它,并且无法同时检查这些绘图。事实上,“重新启动并运行全部”将仅显示最后一个图。
我尝试使用
%matplotlib inline
、%matplotlib auto
或 plt.ioff()
在第一个单元格之后停止交互式显示,但没有成功。
我想知道是否有人可以帮助我。 先谢谢你了
这是一个最小的可重现示例
笔记本的第一个单元格读取图像并生成傅里叶变换(ft),我希望能够随时放大它
%matplotlib nbagg
from skimage import data, io
from skimage.draw import disk
import numpy as np
import matplotlib.pyplot as plt
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)
plt.imshow(ft)
第二个单元将掩模放置在 ft 的峰值之一处并显示输出图像。该图像应显示在其自己的单元格上,并且不应覆盖前一个图像。然而,它不需要是互动的
%matplotlib inline
row, col = 96,104
rr, cc = disk((row, col), 7)
mask=np.zeros_like(img)
mask[rr, cc] = 1
plt.imshow(ft*mask)
我使用小部件(需要 ipympl 包)后端来进行交互式绘图。
但我认为获得单独数字的关键是明确地为每个图创建一个新数字:
%matplotlib widget
from skimage import data, io
from skimage.draw import disk
import numpy as np
import matplotlib.pyplot as plt
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)
plt.figure()
plt.imshow(ft)
plt.show()