Я на самом деле написал код, чтобы сделать именно то, что, я думаю, вы ищете, посмотрите, поможет ли это:
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)
Просто вызовите функцию show в вашем 3d-массиве, и я скажу ему, какой фрагмент для отображения,Вы можете перемещаться по слайсам с помощью клавиш со стрелками, пока у вас выбран график.
Обратите внимание, что здесь ожидаются массивы с формой (x, y, z), вы можете, например, получить такой массив из серии 2d массивов с помощью np.dstack ((im1, im2, ...)).
См. Также Интерактивный график matplotlib с двумя ползунками для примера кода, выполняющего это с ползунками графического интерфейса пользователя