astropy:docs

Source code for astropy.visualization.mpl_normalize

"""
Normalization class for Matplotlib that can be used to produce colorbars.
"""

from __future__ import division, print_function

import numpy as np
from numpy import ma

try:
    import matplotlib
    from matplotlib.colors import Normalize

    # On older versions of matplotlib Normalize is an old-style class
    if not isinstance(Normalize, type):
        class Normalize(Normalize, object):
            pass
except ImportError:
    class Normalize(object):
        def __init__(self, *args, **kwargs):
            raise ImportError("matplotlib is required in order to use this class")


__all__ = ['ImageNormalize']


[docs]class ImageNormalize(Normalize): """ Normalization class to be used with Matplotlib. Parameters ---------- vmin, vmax : float The minimum and maximum levels to show for the data stretch : :class:`~astropy.visualization.BaseStretch` instance The stretch to use for the normalization clip : bool, optional Whether to clip the output values to the [0:1] range """ def __init__(self, vmin=None, vmax=None, stretch=None, clip=False): super(ImageNormalize, self).__init__(vmin=vmin, vmax=vmax, clip=clip) self.vmin = vmin self.vmax = vmax self.stretch = stretch self.inverse_stretch = stretch.inverse
[docs] def __call__(self, values, clip=None): if clip is None: clip = self.clip if isinstance(values, ma.MaskedArray): if clip: mask = False else: mask = values.mask values = values.filled(self.vmax) else: mask = False # Make sure scalars get broadcast to 1-d if np.isscalar(values): values = np.array([values], dtype=float) else: # copy because of in-place operations after values = np.array(values, copy=True, dtype=float) # Normalize based on vmin and vmax np.subtract(values, self.vmin, out=values) np.true_divide(values, self.vmax - self.vmin, out=values) # Clip to the 0 to 1 range if self.clip: values = np.clip(values, 0., 1., out=values) # Stretch values values = self.stretch(values, out=values, clip=False) # Convert to masked array for matplotlib return ma.array(values, mask=mask)
[docs] def inverse(self, values): # Find unstretched values in range 0 to 1 values_norm = self.inverse_stretch(values, clip=False) # Scale to original range return values_norm * (self.vmax - self.vmin) + self.vmin

Page Contents