.. note::
    :class: sphx-glr-download-link-note

    Click :ref:`here <sphx_glr_download_gallery_userdemo_colormap_normalizations_custom.py>` to download the full example code
.. rst-class:: sphx-glr-example-title

.. _sphx_glr_gallery_userdemo_colormap_normalizations_custom.py:


==============================
Colormap Normalizations Custom
==============================

Demonstration of using norm to map colormaps onto data in non-linear ways.




.. image:: /gallery/userdemo/images/sphx_glr_colormap_normalizations_custom_001.png
    :class: sphx-glr-single-img





.. code-block:: python


    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.colors as colors

    N = 100
    '''
    Custom Norm: An example with a customized normalization.  This one
    uses the example above, and normalizes the negative data differently
    from the positive.
    '''
    X, Y = np.mgrid[-3:3:complex(0, N), -2:2:complex(0, N)]
    Z1 = np.exp(-X**2 - Y**2)
    Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
    Z = (Z1 - Z2) * 2


    # Example of making your own norm.  Also see matplotlib.colors.
    # From Joe Kington: This one gives two different linear ramps:
    class MidpointNormalize(colors.Normalize):
        def __init__(self, vmin=None, vmax=None, midpoint=None, clip=False):
            self.midpoint = midpoint
            colors.Normalize.__init__(self, vmin, vmax, clip)

        def __call__(self, value, clip=None):
            # I'm ignoring masked values and all kinds of edge cases to make a
            # simple example...
            x, y = [self.vmin, self.midpoint, self.vmax], [0, 0.5, 1]
            return np.ma.masked_array(np.interp(value, x, y))


    #####
    fig, ax = plt.subplots(2, 1)

    pcm = ax[0].pcolormesh(X, Y, Z,
                           norm=MidpointNormalize(midpoint=0.),
                           cmap='RdBu_r')
    fig.colorbar(pcm, ax=ax[0], extend='both')

    pcm = ax[1].pcolormesh(X, Y, Z, cmap='RdBu_r', vmin=-np.max(Z))
    fig.colorbar(pcm, ax=ax[1], extend='both')

    plt.show()


.. _sphx_glr_download_gallery_userdemo_colormap_normalizations_custom.py:


.. only :: html

 .. container:: sphx-glr-footer
    :class: sphx-glr-footer-example



  .. container:: sphx-glr-download

     :download:`Download Python source code: colormap_normalizations_custom.py <colormap_normalizations_custom.py>`



  .. container:: sphx-glr-download

     :download:`Download Jupyter notebook: colormap_normalizations_custom.ipynb <colormap_normalizations_custom.ipynb>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    Keywords: matplotlib code example, codex, python plot, pyplot
    `Gallery generated by Sphinx-Gallery
    <https://sphinx-gallery.readthedocs.io>`_
