Source code for nipy.algorithms.diagnostics.tsdiffplot

# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*-
# vi: set ft=python sts=4 ts=4 sw=4 et:
''' plot tsdiffana parameters '''
from __future__ import absolute_import

import numpy as np

import nipy
from .timediff import time_slice_diffs

from nipy.externals.six import string_types

[docs]def plot_tsdiffs(results, axes=None): ''' Plotting routine for time series difference metrics Requires matplotlib Parameters ---------- results : dict Results of format returned from :func:`nipy.algorithms.diagnostics.time_slice_diff` ''' import matplotlib.pyplot as plt T = len(results['volume_means']) S = results['slice_mean_diff2'].shape[1] mean_means = np.mean(results['volume_means']) scaled_slice_diff = results['slice_mean_diff2'] / mean_means if axes is None: n_plots = 4 fig = plt.figure() fig.set_size_inches([10,10]) axes = [plt.subplot(n_plots, 1, i+1) for i in range(n_plots)] def xmax_labels(ax, val, xlabel, ylabel): xlims = ax.axis() ax.axis((0, val) + xlims[2:]) ax.set_xlabel(xlabel) ax.set_ylabel(ylabel) # plot of mean volume variance ax = axes[0] ax.plot(results['volume_mean_diff2'] / mean_means) xmax_labels(ax, T-1, 'Difference image number', 'Scaled variance') # plot of diff by slice ax = axes[1] #Set up the color map for the different slices: X, Y = np.meshgrid(np.arange(scaled_slice_diff.shape[0]), np.arange(scaled_slice_diff.shape[1])) # Use HSV in order to code the slices from bottom to top: ax.scatter(X.T.ravel(),scaled_slice_diff.ravel(), c=Y.T.ravel(),cmap=plt.cm.hsv, alpha=0.2) xmax_labels(ax, T-1, 'Difference image number', 'Slice by slice variance') # mean intensity ax = axes[2] ax.plot(results['volume_means'] / mean_means) xmax_labels(ax, T, 'Image number', 'Scaled mean \n voxel intensity') # slice plots min max mean ax = axes[3] ax.plot(np.mean(scaled_slice_diff, 0), 'k') ax.plot(np.min(scaled_slice_diff, 0), 'b') ax.plot(np.max(scaled_slice_diff, 0), 'r') xmax_labels(ax, S+1, 'Slice number', 'Max/mean/min \n slice variation') return axes
@np.deprecate_with_doc('Please see docstring for alternative code') def plot_tsdiffs_image(img, axes=None, show=True): ''' Plot time series diagnostics for image This function is deprecated; please use something like:: results = time_slice_diff_image(img, slice_axis=2) plot_tsdiffs(results) instead. Parameters ---------- img : image-like or filename str image on which to do diagnostics axes : None or sequence, optional Axes on which to plot the diagnostics. If None, then we create a figure and subplots for the plots. Sequence should have length >=4. show : {True, False}, optional If True, show the figure after plotting it Returns ------- axes : Matplotlib axes Axes on which we have done the plots. Will be same as `axes` input if `axes` input was not None ''' if isinstance(img, string_types): title = img else: title = 'Difference plots' img = nipy.as_image(img) res = time_slice_diffs(img) axes = plot_tsdiffs(res, axes) axes[0].set_title(title) if show: # show the plot import matplotlib.pyplot as plt plt.show() return axes