2024-09-26 18:16:02 发布
网友
我有一个三维数组,表示笛卡尔空间上的密度值。要获得二维图像,我只需使用sum(array,2)对其中一个轴求和,然后使用matplotlib函数imshow(array2D)获得二维图像。
sum(array,2)
imshow(array2D)
我想做的是使用imshow()一次只显示3D数组的一个片段,这样我就可以在3D数组中“翻页”以查看图像的不同点。
imshow()
slice命令很简单:array[:,:,x],但我看不到一次显示每个切片的方法。除了每次手动更改程序文件外,有人有其他建议吗?这能以某种方式交互完成吗?
array[:,:,x]
实际上,我编写代码是为了做我认为您正在寻找的事情,看看这是否有帮助:
import numpy as np import pylab class plotter: def __init__(self, im, i=0): self.im = im self.i = i self.vmin = im.min() self.vmax = im.max() self.fig = pylab.figure() pylab.gray() self.ax = self.fig.add_subplot(111) self.draw() self.fig.canvas.mpl_connect('key_press_event',self) def draw(self): if self.im.ndim is 2: im = self.im if self.im.ndim is 3: im = self.im[...,self.i] self.ax.set_title('image {0}'.format(self.i)) pylab.show() self.ax.imshow(im, vmin=self.vmin, vmax=self.vmax, interpolation=None) def __call__(self, event): old_i = self.i if event.key=='right': self.i = min(self.im.shape[2]-1, self.i+1) elif event.key == 'left': self.i = max(0, self.i-1) if old_i != self.i: self.draw() self.fig.canvas.draw() def slice_show(im, i=0): plotter(im, i)
只要调用3d数组上的show函数,我就会告诉它要显示哪个片段。只要选择了绘图,就可以使用箭头键单步执行切片。
注意,这需要具有形状(x,y,z)的数组,例如,可以从具有np.dstack((im1,im2,…)的一系列2d数组中获取这样的数组。
另请参见Interactive matplotlib plot with two sliders,以获取使用gui滑块执行此操作的代码示例
实际上,我编写代码是为了做我认为您正在寻找的事情,看看这是否有帮助:
只要调用3d数组上的show函数,我就会告诉它要显示哪个片段。只要选择了绘图,就可以使用箭头键单步执行切片。
注意,这需要具有形状(x,y,z)的数组,例如,可以从具有np.dstack((im1,im2,…)的一系列2d数组中获取这样的数组。
另请参见Interactive matplotlib plot with two sliders,以获取使用gui滑块执行此操作的代码示例
相关问题 更多 >
编程相关推荐