diff --git a/examples/pylab_examples/mri_demo.py b/examples/pylab_examples/mri_demo.py index 75acc1e4e034..6574b0bf7e17 100755 --- a/examples/pylab_examples/mri_demo.py +++ b/examples/pylab_examples/mri_demo.py @@ -1,13 +1,19 @@ -from __future__ import print_function +"""Displays an MRI image.""" + import matplotlib.pyplot as plt import matplotlib.cbook as cbook +import matplotlib.cm as cm import numpy as np -# data are 256x256 16 bit integers + +fig, ax = plt.subplots(num="MRI_demo") + +# Data are 256x256 16 bit integers dfile = cbook.get_sample_data('s1045.ima.gz') im = np.fromstring(dfile.read(), np.uint16).astype(float) -im.shape = 256, 256 +im.shape = (256, 256) +dfile.close() -plt.imshow(im, cmap=plt.cm.gray) -plt.axis('off') +ax.imshow(im, cmap=cm.gray) +ax.axis('off') plt.show() diff --git a/examples/pylab_examples/mri_with_eeg.py b/examples/pylab_examples/mri_with_eeg.py index e7f8c7f16937..2a601ea707a2 100755 --- a/examples/pylab_examples/mri_with_eeg.py +++ b/examples/pylab_examples/mri_with_eeg.py @@ -1,77 +1,79 @@ -""" -This now uses the imshow command instead of pcolor which *is much -faster* +"""Displays a set of subplots with an MRI image, its intensity histogram and +some EEG traces. """ from __future__ import division, print_function import numpy as np +import matplotlib.pyplot as plt +import matplotlib.cbook as cbook +import matplotlib.cm as cm -from matplotlib.pyplot import * from matplotlib.collections import LineCollection -import matplotlib.cbook as cbook -# I use if 1 to break up the different regions of code visually - -if 1: # load the data - # data are 256x256 16 bit integers - dfile = cbook.get_sample_data('s1045.ima.gz') - im = np.fromstring(dfile.read(), np.uint16).astype(float) - im.shape = 256, 256 - -if 1: # plot the MRI in pcolor - subplot(221) - imshow(im, cmap=cm.gray) - axis('off') - -if 1: # plot the histogram of MRI intensity - subplot(222) - im = np.ravel(im) - im = im[np.nonzero(im)] # ignore the background - im = im/(2.0**15) # normalize - hist(im, 100) - xticks([-1, -.5, 0, .5, 1]) - yticks([]) - xlabel('intensity') - ylabel('MRI density') - -if 1: # plot the EEG - # load the data - - numSamples, numRows = 800, 4 - eegfile = cbook.get_sample_data('eeg.dat', asfileobj=False) - print('loading eeg %s' % eegfile) - data = np.fromstring(open(eegfile, 'rb').read(), float) - data.shape = numSamples, numRows - t = 10.0 * np.arange(numSamples, dtype=float)/numSamples - ticklocs = [] - ax = subplot(212) - xlim(0, 10) - xticks(np.arange(10)) - dmin = data.min() - dmax = data.max() - dr = (dmax - dmin)*0.7 # Crowd them a bit. - y0 = dmin - y1 = (numRows - 1) * dr + dmax - ylim(y0, y1) - - segs = [] - for i in range(numRows): - segs.append(np.hstack((t[:, np.newaxis], data[:, i, np.newaxis]))) - ticklocs.append(i*dr) - - offsets = np.zeros((numRows, 2), dtype=float) - offsets[:, 1] = ticklocs - - lines = LineCollection(segs, offsets=offsets, - transOffset=None, - ) - - ax.add_collection(lines) - - # set the yticks to use axes coords on the y axis - ax.set_yticks(ticklocs) - ax.set_yticklabels(['PG3', 'PG5', 'PG7', 'PG9']) - - xlabel('time (s)') - -show() +from matplotlib.ticker import MultipleLocator + +fig = plt.figure("MRI_with_EEG") + +# Load the MRI data (256x256 16 bit integers) +dfile = cbook.get_sample_data('s1045.ima.gz') +im = np.fromstring(dfile.read(), np.uint16).astype(float) +im.shape = (256, 256) +dfile.close() + +# Plot the MRI image +ax0 = fig.add_subplot(2, 2, 1) +ax0.imshow(im, cmap=cm.gray) +ax0.axis('off') + +# Plot the histogram of MRI intensity +ax1 = fig.add_subplot(2, 2, 2) +im = np.ravel(im) +im = im[np.nonzero(im)] # Ignore the background +im = im / (2**16 - 1) # Normalize +ax1.hist(im, bins=100) +ax1.xaxis.set_major_locator(MultipleLocator(0.4)) +ax1.minorticks_on() +ax1.set_yticks([]) +ax1.set_xlabel('Intensity (a.u.)') +ax1.set_ylabel('MRI density') + +# Load the EEG data +numSamples, numRows = 800, 4 +eegfile = cbook.get_sample_data('eeg.dat', asfileobj=False) +print('Loading EEG %s' % eegfile) +data = np.fromfile(eegfile, dtype=float) +data.shape = (numSamples, numRows) +t = 10.0 * np.arange(numSamples) / numSamples + +# Plot the EEG +ticklocs = [] +ax2 = fig.add_subplot(2, 1, 2) +ax2.set_xlim(0, 10) +ax2.set_xticks(np.arange(10)) +dmin = data.min() +dmax = data.max() +dr = (dmax - dmin) * 0.7 # Crowd them a bit. +y0 = dmin +y1 = (numRows - 1) * dr + dmax +ax2.set_ylim(y0, y1) + +segs = [] +for i in range(numRows): + segs.append(np.hstack((t[:, np.newaxis], data[:, i, np.newaxis]))) + ticklocs.append(i * dr) + +offsets = np.zeros((numRows, 2), dtype=float) +offsets[:, 1] = ticklocs + +lines = LineCollection(segs, offsets=offsets, transOffset=None) +ax2.add_collection(lines) + +# Set the yticks to use axes coordinates on the y axis +ax2.set_yticks(ticklocs) +ax2.set_yticklabels(['PG3', 'PG5', 'PG7', 'PG9']) + +ax2.set_xlabel('Time (s)') + + +plt.tight_layout() +plt.show()