
.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "gallery/widgets/lasso_selector_demo_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_widgets_lasso_selector_demo_sgskip.py>`
        to download the full example code.

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

.. _sphx_glr_gallery_widgets_lasso_selector_demo_sgskip.py:


==============
Lasso Selector
==============

Interactively selecting data points with the lasso tool.

This examples plots a scatter plot. You can then select a few points by drawing
a lasso loop around the points on the graph. To draw, just click
on the graph, hold, and drag it around the points you need to select.

.. GENERATED FROM PYTHON SOURCE LINES 12-103

.. code-block:: Python



    import numpy as np

    from matplotlib.path import Path
    from matplotlib.widgets import LassoSelector


    class SelectFromCollection:
        """
        Select indices from a matplotlib collection using `LassoSelector`.

        Selected indices are saved in the `ind` attribute. This tool fades out the
        points that are not part of the selection (i.e., reduces their alpha
        values). If your collection has alpha < 1, this tool will permanently
        alter the alpha values.

        Note that this tool selects collection objects based on their *origins*
        (i.e., `offsets`).

        Parameters
        ----------
        ax : `~matplotlib.axes.Axes`
            Axes to interact with.
        collection : `matplotlib.collections.Collection` subclass
            Collection you want to select from.
        alpha_other : 0 <= float <= 1
            To highlight a selection, this tool sets all selected points to an
            alpha value of 1 and non-selected points to *alpha_other*.
        """

        def __init__(self, ax, collection, alpha_other=0.3):
            self.canvas = ax.figure.canvas
            self.collection = collection
            self.alpha_other = alpha_other

            self.xys = collection.get_offsets()
            self.Npts = len(self.xys)

            # Ensure that we have separate colors for each object
            self.fc = collection.get_facecolors()
            if len(self.fc) == 0:
                raise ValueError('Collection must have a facecolor')
            elif len(self.fc) == 1:
                self.fc = np.tile(self.fc, (self.Npts, 1))

            self.lasso = LassoSelector(ax, onselect=self.onselect)
            self.ind = []

        def onselect(self, verts):
            path = Path(verts)
            self.ind = np.nonzero(path.contains_points(self.xys))[0]
            self.fc[:, -1] = self.alpha_other
            self.fc[self.ind, -1] = 1
            self.collection.set_facecolors(self.fc)
            self.canvas.draw_idle()

        def disconnect(self):
            self.lasso.disconnect_events()
            self.fc[:, -1] = 1
            self.collection.set_facecolors(self.fc)
            self.canvas.draw_idle()


    if __name__ == '__main__':
        import matplotlib.pyplot as plt

        # Fixing random state for reproducibility
        np.random.seed(19680801)

        data = np.random.rand(100, 2)

        subplot_kw = dict(xlim=(0, 1), ylim=(0, 1), autoscale_on=False)
        fig, ax = plt.subplots(subplot_kw=subplot_kw)

        pts = ax.scatter(data[:, 0], data[:, 1], s=80)
        selector = SelectFromCollection(ax, pts)

        def accept(event):
            if event.key == "enter":
                print("Selected points:")
                print(selector.xys[selector.ind])
                selector.disconnect()
                ax.set_title("")
                fig.canvas.draw()

        fig.canvas.mpl_connect("key_press_event", accept)
        ax.set_title("Press enter to accept selected points.")

        plt.show()


.. GENERATED FROM PYTHON SOURCE LINES 104-111

.. admonition:: References

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

   - `matplotlib.widgets.LassoSelector`
   - `matplotlib.path.Path`


.. _sphx_glr_download_gallery_widgets_lasso_selector_demo_sgskip.py:

.. only:: html

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

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

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

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

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

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

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


.. only:: html

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

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