

.. _sphx_glr_gallery_images_contours_and_fields_contourf_demo.py:


=============
Contourf Demo
=============

How to use the ``contourf`` function to create filled contour plots.




.. rst-class:: sphx-glr-horizontal


    *

      .. image:: /gallery/images_contours_and_fields/images/sphx_glr_contourf_demo_001.png
            :scale: 47

    *

      .. image:: /gallery/images_contours_and_fields/images/sphx_glr_contourf_demo_002.png
            :scale: 47

    *

      .. image:: /gallery/images_contours_and_fields/images/sphx_glr_contourf_demo_003.png
            :scale: 47





.. code-block:: python

    import numpy as np
    import matplotlib.pyplot as plt

    origin = 'lower'

    delta = 0.025

    x = y = np.arange(-3.0, 3.01, delta)
    X, Y = np.meshgrid(x, y)
    Z1 = plt.mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
    Z2 = plt.mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
    Z = 10 * (Z1 - Z2)

    nr, nc = Z.shape

    # put NaNs in one corner:
    Z[-nr // 6:, -nc // 6:] = np.nan
    # contourf will convert these to masked


    Z = np.ma.array(Z)
    # mask another corner:
    Z[:nr // 6, :nc // 6] = np.ma.masked

    # mask a circle in the middle:
    interior = np.sqrt((X**2) + (Y**2)) < 0.5
    Z[interior] = np.ma.masked

    # We are using automatic selection of contour levels;
    # this is usually not such a good idea, because they don't
    # occur on nice boundaries, but we do it here for purposes
    # of illustration.
    CS = plt.contourf(X, Y, Z, 10, cmap=plt.cm.bone, origin=origin)

    # Note that in the following, we explicitly pass in a subset of
    # the contour levels used for the filled contours.  Alternatively,
    # We could pass in additional levels to provide extra resolution,
    # or leave out the levels kwarg to use all of the original levels.

    CS2 = plt.contour(CS, levels=CS.levels[::2], colors='r', origin=origin)

    plt.title('Nonsense (3 masked regions)')
    plt.xlabel('word length anomaly')
    plt.ylabel('sentence length anomaly')

    # Make a colorbar for the ContourSet returned by the contourf call.
    cbar = plt.colorbar(CS)
    cbar.ax.set_ylabel('verbosity coefficient')
    # Add the contour line levels to the colorbar
    cbar.add_lines(CS2)

    plt.figure()

    # Now make a contour plot with the levels specified,
    # and with the colormap generated automatically from a list
    # of colors.
    levels = [-1.5, -1, -0.5, 0, 0.5, 1]
    CS3 = plt.contourf(X, Y, Z, levels,
                       colors=('r', 'g', 'b'),
                       origin=origin,
                       extend='both')
    # Our data range extends outside the range of levels; make
    # data below the lowest contour level yellow, and above the
    # highest level cyan:
    CS3.cmap.set_under('yellow')
    CS3.cmap.set_over('cyan')

    CS4 = plt.contour(X, Y, Z, levels,
                      colors=('k',),
                      linewidths=(3,),
                      origin=origin)
    plt.title('Listed colors (3 masked regions)')
    plt.clabel(CS4, fmt='%2.1f', colors='w', fontsize=14)

    # Notice that the colorbar command gets all the information it
    # needs from the ContourSet object, CS3.
    plt.colorbar(CS3)

    # Illustrate all 4 possible "extend" settings:
    extends = ["neither", "both", "min", "max"]
    cmap = plt.cm.get_cmap("winter")
    cmap.set_under("magenta")
    cmap.set_over("yellow")
    # Note: contouring simply excludes masked or nan regions, so
    # instead of using the "bad" colormap value for them, it draws
    # nothing at all in them.  Therefore the following would have
    # no effect:
    # cmap.set_bad("red")

    fig, axs = plt.subplots(2, 2)
    fig.subplots_adjust(hspace=0.3)

    for ax, extend in zip(axs.ravel(), extends):
        cs = ax.contourf(X, Y, Z, levels, cmap=cmap, extend=extend, origin=origin)
        fig.colorbar(cs, ax=ax, shrink=0.9)
        ax.set_title("extend = %s" % extend)
        ax.locator_params(nbins=4)

    plt.show()

**Total running time of the script:** ( 0 minutes  1.054 seconds)



.. only :: html

 .. container:: sphx-glr-footer


  .. container:: sphx-glr-download

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



  .. container:: sphx-glr-download

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


.. only:: html

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

    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.readthedocs.io>`_
