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

.. only:: html

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

        Click :ref:`here <sphx_glr_download_gallery_event_handling_trifinder_event_demo.py>`
        to download the full example code

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

.. _sphx_glr_gallery_event_handling_trifinder_event_demo.py:


====================
Trifinder Event Demo
====================

Example showing the use of a TriFinder object.  As the mouse is moved over the
triangulation, the triangle under the cursor is highlighted and the index of
the triangle is displayed in the plot title.

.. GENERATED FROM PYTHON SOURCE LINES 10-62



.. image:: /gallery/event_handling/images/sphx_glr_trifinder_event_demo_001.png
    :alt: trifinder event demo
    :class: sphx-glr-single-img





.. code-block:: default

    import matplotlib.pyplot as plt
    from matplotlib.tri import Triangulation
    from matplotlib.patches import Polygon
    import numpy as np


    def update_polygon(tri):
        if tri == -1:
            points = [0, 0, 0]
        else:
            points = triang.triangles[tri]
        xs = triang.x[points]
        ys = triang.y[points]
        polygon.set_xy(np.column_stack([xs, ys]))


    def on_mouse_move(event):
        if event.inaxes is None:
            tri = -1
        else:
            tri = trifinder(event.xdata, event.ydata)
        update_polygon(tri)
        plt.title('In triangle %i' % tri)
        event.canvas.draw()


    # Create a Triangulation.
    n_angles = 16
    n_radii = 5
    min_radius = 0.25
    radii = np.linspace(min_radius, 0.95, n_radii)
    angles = np.linspace(0, 2 * np.pi, n_angles, endpoint=False)
    angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1)
    angles[:, 1::2] += np.pi / n_angles
    x = (radii*np.cos(angles)).flatten()
    y = (radii*np.sin(angles)).flatten()
    triang = Triangulation(x, y)
    triang.set_mask(np.hypot(x[triang.triangles].mean(axis=1),
                             y[triang.triangles].mean(axis=1))
                    < min_radius)

    # Use the triangulation's default TriFinder object.
    trifinder = triang.get_trifinder()

    # Setup plot and callbacks.
    plt.subplot(111, aspect='equal')
    plt.triplot(triang, 'bo-')
    polygon = Polygon([[0, 0], [0, 0]], facecolor='y')  # dummy data for (xs, ys)
    update_polygon(-1)
    plt.gca().add_patch(polygon)
    plt.gcf().canvas.mpl_connect('motion_notify_event', on_mouse_move)
    plt.show()


.. _sphx_glr_download_gallery_event_handling_trifinder_event_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: trifinder_event_demo.py <trifinder_event_demo.py>`



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

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