.. only:: html

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

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

    .. _sphx_glr_gallery_images_contours_and_fields_contour_demo.py:


============
Contour Demo
============

Illustrate simple contour plotting, contours on an image with
a colorbar for the contours, and labelled contours.

See also the :doc:`contour image example
</gallery/images_contours_and_fields/contour_image>`.


.. code-block:: default

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


    delta = 0.025
    x = np.arange(-3.0, 3.0, delta)
    y = np.arange(-2.0, 2.0, delta)
    X, Y = np.meshgrid(x, y)
    Z1 = np.exp(-X**2 - Y**2)
    Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
    Z = (Z1 - Z2) * 2








Create a simple contour plot with labels using default colors.  The
inline argument to clabel will control whether the labels are draw
over the line segments of the contour, removing the lines beneath
the label


.. code-block:: default


    fig, ax = plt.subplots()
    CS = ax.contour(X, Y, Z)
    ax.clabel(CS, inline=1, fontsize=10)
    ax.set_title('Simplest default with labels')





.. image:: /gallery/images_contours_and_fields/images/sphx_glr_contour_demo_001.png
    :class: sphx-glr-single-img


.. rst-class:: sphx-glr-script-out

 Out:

 .. code-block:: none


    Text(0.5, 1.0, 'Simplest default with labels')



contour labels can be placed manually by providing list of positions
(in data coordinate). See ginput_manual_clabel.py for interactive
placement.


.. code-block:: default


    fig, ax = plt.subplots()
    CS = ax.contour(X, Y, Z)
    manual_locations = [(-1, -1.4), (-0.62, -0.7), (-2, 0.5), (1.7, 1.2), (2.0, 1.4), (2.4, 1.7)]
    ax.clabel(CS, inline=1, fontsize=10, manual=manual_locations)
    ax.set_title('labels at selected locations')





.. image:: /gallery/images_contours_and_fields/images/sphx_glr_contour_demo_002.png
    :class: sphx-glr-single-img


.. rst-class:: sphx-glr-script-out

 Out:

 .. code-block:: none


    Text(0.5, 1.0, 'labels at selected locations')



You can force all the contours to be the same color.


.. code-block:: default


    fig, ax = plt.subplots()
    CS = ax.contour(X, Y, Z, 6, colors='k')  # Negative contours default to dashed.
    ax.clabel(CS, fontsize=9, inline=1)
    ax.set_title('Single color - negative contours dashed')




.. image:: /gallery/images_contours_and_fields/images/sphx_glr_contour_demo_003.png
    :class: sphx-glr-single-img


.. rst-class:: sphx-glr-script-out

 Out:

 .. code-block:: none


    Text(0.5, 1.0, 'Single color - negative contours dashed')



You can set negative contours to be solid instead of dashed:


.. code-block:: default


    matplotlib.rcParams['contour.negative_linestyle'] = 'solid'
    fig, ax = plt.subplots()
    CS = ax.contour(X, Y, Z, 6, colors='k')  # Negative contours default to dashed.
    ax.clabel(CS, fontsize=9, inline=1)
    ax.set_title('Single color - negative contours solid')





.. image:: /gallery/images_contours_and_fields/images/sphx_glr_contour_demo_004.png
    :class: sphx-glr-single-img


.. rst-class:: sphx-glr-script-out

 Out:

 .. code-block:: none


    Text(0.5, 1.0, 'Single color - negative contours solid')



And you can manually specify the colors of the contour


.. code-block:: default


    fig, ax = plt.subplots()
    CS = ax.contour(X, Y, Z, 6,
                    linewidths=np.arange(.5, 4, .5),
                    colors=('r', 'green', 'blue', (1, 1, 0), '#afeeee', '0.5'),
                    )
    ax.clabel(CS, fontsize=9, inline=1)
    ax.set_title('Crazy lines')





.. image:: /gallery/images_contours_and_fields/images/sphx_glr_contour_demo_005.png
    :class: sphx-glr-single-img


.. rst-class:: sphx-glr-script-out

 Out:

 .. code-block:: none

    /build/matplotlib-uwgRzQ/matplotlib-3.2.2/build/lib.linux-x86_64-3.8/matplotlib/colors.py:263: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray
      c = np.array(c)

    Text(0.5, 1.0, 'Crazy lines')



Or you can use a colormap to specify the colors; the default
colormap will be used for the contour lines


.. code-block:: default


    fig, ax = plt.subplots()
    im = ax.imshow(Z, interpolation='bilinear', origin='lower',
                    cmap=cm.gray, extent=(-3, 3, -2, 2))
    levels = np.arange(-1.2, 1.6, 0.2)
    CS = ax.contour(Z, levels, origin='lower', cmap='flag',
                    linewidths=2, extent=(-3, 3, -2, 2))

    # Thicken the zero contour.
    zc = CS.collections[6]
    plt.setp(zc, linewidth=4)

    ax.clabel(CS, levels[1::2],  # label every second level
              inline=1, fmt='%1.1f', fontsize=14)

    # make a colorbar for the contour lines
    CB = fig.colorbar(CS, shrink=0.8, extend='both')

    ax.set_title('Lines with colorbar')

    # We can still add a colorbar for the image, too.
    CBI = fig.colorbar(im, orientation='horizontal', shrink=0.8)

    # This makes the original colorbar look a bit out of place,
    # so let's improve its position.

    l, b, w, h = ax.get_position().bounds
    ll, bb, ww, hh = CB.ax.get_position().bounds
    CB.ax.set_position([ll, b + 0.1*h, ww, h*0.8])

    plt.show()




.. image:: /gallery/images_contours_and_fields/images/sphx_glr_contour_demo_006.png
    :class: sphx-glr-single-img





------------

References
""""""""""

The use of the following functions and methods is shown
in this example:


.. code-block:: default


    import matplotlib
    matplotlib.axes.Axes.contour
    matplotlib.pyplot.contour
    matplotlib.figure.Figure.colorbar
    matplotlib.pyplot.colorbar
    matplotlib.axes.Axes.clabel
    matplotlib.pyplot.clabel
    matplotlib.axes.Axes.set_position
    matplotlib.axes.Axes.get_position




.. rst-class:: sphx-glr-script-out

 Out:

 .. code-block:: none


    <function _AxesBase.get_position at 0x7f35edc6ab80>




.. _sphx_glr_download_gallery_images_contours_and_fields_contour_demo.py:


.. only :: html

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



  .. container:: sphx-glr-download sphx-glr-download-python

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



  .. container:: sphx-glr-download sphx-glr-download-jupyter

     :download:`Download Jupyter notebook: contour_demo.ipynb <contour_demo.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>`_
