
.. 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

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

        Click :ref:`here <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.

This script must be run interactively using a backend that has a
graphical user interface (for example, using GTK3Agg backend, but not
PS backend).

.. GENERATED FROM PYTHON SOURCE LINES 14-26

.. code-block:: default


    import time

    import numpy as np
    import matplotlib.pyplot as plt


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


.. GENERATED FROM PYTHON SOURCE LINES 27-28

Define a triangle by clicking three points

.. GENERATED FROM PYTHON SOURCE LINES 28-58

.. code-block:: default



    plt.clf()
    plt.setp(plt.gca(), autoscale_on=False)

    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 59-61

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

.. GENERATED FROM PYTHON SOURCE LINES 61-78

.. code-block:: default


    # 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 79-80

Now do a zoom

.. GENERATED FROM PYTHON SOURCE LINES 80-97

.. code-block:: default


    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
    :class: sphx-glr-footer-example



  .. 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-jupyter

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