I actually wrote the code to do what I think you are looking for, see if this helps:
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)
Just call the show function on your three-dimensional array, I will tell you which fragment is displayed. You can move through the slices using the arrow keys as long as you have the selected plot.
Note that this expects arrays with the form (x, y, z), you can, for example, get such an array from a series of 2d arrays using np.dstack ((im1, im2, ...)).
See also Interactive matplotlib graph with two sliders for an example of how to do this using gui sliders.
triplepoint217
source share