
.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "gallery/event_handling/ginput_manual_clabel_sgskip.py"
.. LINE NUMBERS ARE GIVEN BELOW.

.. only:: html

    .. meta::
        :keywords: codex

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

        :ref:`Go to the end <sphx_glr_download_gallery_event_handling_ginput_manual_clabel_sgskip.py>`
        to download the full example code.

.. rst-class:: sphx-glr-example-title

.. _sphx_glr_gallery_event_handling_ginput_manual_clabel_sgskip.py:


=====================
Interactive functions
=====================

This provides examples of uses of interactive functions, such as ginput,
waitforbuttonpress and manual clabel placement.

.. note::
    This example exercises the interactive capabilities of Matplotlib, and this
    will not appear in the static documentation. Please run this code on your
    machine to see the interactivity.

    You can copy and paste individual parts, or download the entire example
    using the link at the bottom of the page.

.. GENERATED FROM PYTHON SOURCE LINES 17-29

.. code-block:: Python


    import time

    import matplotlib.pyplot as plt
    import numpy as np


    def tellme(s):
        print(s)
        plt.title(s, fontsize=16)
        plt.draw()


.. GENERATED FROM PYTHON SOURCE LINES 30-31

Define a triangle by clicking three points

.. GENERATED FROM PYTHON SOURCE LINES 31-62

.. code-block:: Python



    plt.figure()
    plt.xlim(0, 1)
    plt.ylim(0, 1)

    tellme('You will define a triangle, click to begin')

    plt.waitforbuttonpress()

    while True:
        pts = []
        while len(pts) < 3:
            tellme('Select 3 corners with mouse')
            pts = np.asarray(plt.ginput(3, timeout=-1))
            if len(pts) < 3:
                tellme('Too few points, starting over')
                time.sleep(1)  # Wait a second

        ph = plt.fill(pts[:, 0], pts[:, 1], 'r', lw=2)

        tellme('Happy? Key click for yes, mouse click for no')

        if plt.waitforbuttonpress():
            break

        # Get rid of fill
        for p in ph:
            p.remove()



.. GENERATED FROM PYTHON SOURCE LINES 63-65

Now contour according to distance from triangle
corners - just an example

.. GENERATED FROM PYTHON SOURCE LINES 65-82

.. code-block:: Python


    # Define a nice function of distance from individual pts
    def f(x, y, pts):
        z = np.zeros_like(x)
        for p in pts:
            z = z + 1/(np.sqrt((x - p[0])**2 + (y - p[1])**2))
        return 1/z


    X, Y = np.meshgrid(np.linspace(-1, 1, 51), np.linspace(-1, 1, 51))
    Z = f(X, Y, pts)

    CS = plt.contour(X, Y, Z, 20)

    tellme('Use mouse to select contour label locations, middle button to finish')
    CL = plt.clabel(CS, manual=True)


.. GENERATED FROM PYTHON SOURCE LINES 83-84

Now do a zoom

.. GENERATED FROM PYTHON SOURCE LINES 84-101

.. code-block:: Python


    tellme('Now do a nested zoom, click to begin')
    plt.waitforbuttonpress()

    while True:
        tellme('Select two corners of zoom, middle mouse button to finish')
        pts = plt.ginput(2, timeout=-1)
        if len(pts) < 2:
            break
        (x0, y0), (x1, y1) = pts
        xmin, xmax = sorted([x0, x1])
        ymin, ymax = sorted([y0, y1])
        plt.xlim(xmin, xmax)
        plt.ylim(ymin, ymax)

    tellme('All Done!')
    plt.show()


.. _sphx_glr_download_gallery_event_handling_ginput_manual_clabel_sgskip.py:

.. only:: html

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

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

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

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

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

    .. container:: sphx-glr-download sphx-glr-download-zip

      :download:`Download zipped: ginput_manual_clabel_sgskip.zip <ginput_manual_clabel_sgskip.zip>`


.. only:: html

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

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