From 0d73999cfdfab8ce5f096d0964ee4025ba497641 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sat, 12 Dec 2015 12:37:24 -0600 Subject: [PATCH] Allow axes to be provided to imshow and fix colorbar Allow axes to be provided to imshow and fix colorbar Allow axes to be provided to imshow and fix colorbar Allow axes to be provided to imshow and fix colorbar Use tight layout by default Try and fix appveyor issue Handle deprecation warning on appveyor Pin the colorbar to the image using box-forced Fix tests again Update function signature Update function signature Fix imshow call Fix docstring with utf characters Remove kwargs --- .travis.yml | 8 +++++--- skimage/io/_plugins/matplotlib_plugin.py | 22 ++++++++++++++++------ skimage/io/tests/test_mpl_imshow.py | 5 +++-- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index d3c10f2c..a26d1af9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,8 +18,8 @@ addons: packages: - ccache - libfreeimage3 - - texlive - - texlive-latex-extra + - texlive + - texlive-latex-extra - dvipng - python-qt4 env: @@ -53,7 +53,9 @@ before_install: install: - python setup.py develop -script: tools/travis_script.sh +script: + - tools/travis_script.sh + - grep -irn "R385" doc/build after_success: - coveralls diff --git a/skimage/io/_plugins/matplotlib_plugin.py b/skimage/io/_plugins/matplotlib_plugin.py index a9754a72..e958cc36 100644 --- a/skimage/io/_plugins/matplotlib_plugin.py +++ b/skimage/io/_plugins/matplotlib_plugin.py @@ -2,6 +2,7 @@ from collections import namedtuple import numpy as np import warnings import matplotlib.pyplot as plt +from mpl_toolkits.axes_grid1 import make_axes_locatable from ...util import dtype as dtypes from ...exposure import is_low_contrast from ...util.colormap import viridis @@ -110,7 +111,7 @@ def _get_display_range(image): return lo, hi, cmap -def imshow(im, *args, **kwargs): +def imshow(im, ax=None, show_cbar=None, **kwargs): """Show the input image and return the current axes. By default, the image is displayed in greyscale, rather than @@ -131,8 +132,11 @@ def imshow(im, *args, **kwargs): ---------- im : array, shape (M, N[, 3]) The image to display. - - *args, **kwargs : positional and keyword arguments + ax: `matplotlib.axes.Axes`, optional + The axis to use for the image, defaults to plt.gca(). + show_cbar: boolean, optional. + Whether to show the colorbar (used to override default behavior). + **kwargs : Keyword arguments These are passed directly to `matplotlib.pyplot.imshow`. Returns @@ -147,9 +151,15 @@ def imshow(im, *args, **kwargs): kwargs.setdefault('cmap', cmap) kwargs.setdefault('vmin', lo) kwargs.setdefault('vmax', hi) - ax_im = plt.imshow(im, *args, **kwargs) - if cmap != _default_colormap: - plt.colorbar() + + ax = ax or plt.gca() + ax_im = ax.imshow(im, **kwargs) + if (cmap != _default_colormap and show_cbar is not False) or show_cbar: + divider = make_axes_locatable(ax) + cax = divider.append_axes("right", size="5%", pad=0.05) + plt.colorbar(ax_im, cax=cax) + ax.set_adjustable('box-forced') + ax.get_figure().tight_layout() return ax_im imread = plt.imread diff --git a/skimage/io/tests/test_mpl_imshow.py b/skimage/io/tests/test_mpl_imshow.py index e369273a..26482f64 100644 --- a/skimage/io/tests/test_mpl_imshow.py +++ b/skimage/io/tests/test_mpl_imshow.py @@ -78,7 +78,7 @@ def test_low_dynamic_range(): def test_outside_standard_range(): plt.figure() - with expected_warnings(["out of standard range"]): + with expected_warnings(["out of standard range|CObject type is marked"]): ax_im = io.imshow(im_hi) assert ax_im.get_clim() == (im_hi.min(), im_hi.max()) assert n_subplots(ax_im) == 2 @@ -87,7 +87,8 @@ def test_outside_standard_range(): def test_nonstandard_type(): plt.figure() - with expected_warnings(["Low image dynamic range"]): + + with expected_warnings(["Low image dynamic range|CObject type is marked"]): ax_im = io.imshow(im64) assert ax_im.get_clim() == (im64.min(), im64.max()) assert n_subplots(ax_im) == 2