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

.. only:: html

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

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

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

.. _sphx_glr_gallery_widgets_rectangle_selector.py:


==================
Rectangle Selector
==================

Do a mouseclick somewhere, move the mouse to some destination, release
the button.  This class gives click- and release-events and also draws
a line or a box from the click-point to the actual mouseposition
(within the same axes) until the button is released.  Within the
method ``self.ignore()`` it is checked whether the button from eventpress
and eventrelease are the same.

.. GENERATED FROM PYTHON SOURCE LINES 13-60



.. image:: /gallery/widgets/images/sphx_glr_rectangle_selector_001.png
    :alt: Click and drag to draw a rectangle. Press 't' to toggle the selector on and off.
    :class: sphx-glr-single-img





.. code-block:: default


    from matplotlib.widgets import RectangleSelector
    import numpy as np
    import matplotlib.pyplot as plt


    def line_select_callback(eclick, erelease):
        """
        Callback for line selection.

        *eclick* and *erelease* are the press and release events.
        """
        x1, y1 = eclick.xdata, eclick.ydata
        x2, y2 = erelease.xdata, erelease.ydata
        print(f"({x1:3.2f}, {y1:3.2f}) --> ({x2:3.2f}, {y2:3.2f})")
        print(f" The buttons you used were: {eclick.button} {erelease.button}")


    def toggle_selector(event):
        print(' Key pressed.')
        if event.key == 't':
            if toggle_selector.RS.active:
                print(' RectangleSelector deactivated.')
                toggle_selector.RS.set_active(False)
            else:
                print(' RectangleSelector activated.')
                toggle_selector.RS.set_active(True)


    fig, ax = plt.subplots()
    N = 100000  # If N is large one can see improvement by using blitting.
    x = np.linspace(0, 10, N)

    ax.plot(x, np.sin(2*np.pi*x))  # plot something
    ax.set_title(
        "Click and drag to draw a rectangle.\n"
        "Press 't' to toggle the selector on and off.")

    # drawtype is 'box' or 'line' or 'none'
    toggle_selector.RS = RectangleSelector(ax, line_select_callback,
                                           drawtype='box', useblit=True,
                                           button=[1, 3],  # disable middle button
                                           minspanx=5, minspany=5,
                                           spancoords='pixels',
                                           interactive=True)
    fig.canvas.mpl_connect('key_press_event', toggle_selector)
    plt.show()


.. _sphx_glr_download_gallery_widgets_rectangle_selector.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: rectangle_selector.py <rectangle_selector.py>`



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

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