Note

Go to the endto download the full example code.

Lasso Selector#

Interactively selecting data points with the lasso tool.

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

importnumpyasnpfrommatplotlib.pathimportPathfrommatplotlib.widgetsimportLassoSelectorclassSelectFromCollection:"""    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.canvasself.collection=collectionself.alpha_other=alpha_otherself.xys=collection.get_offsets()self.Npts=len(self.xys)# Ensure that we have separate colors for each objectself.fc=collection.get_facecolors()iflen(self.fc)==0:raiseValueError('Collection must have a facecolor')eliflen(self.fc)==1:self.fc=np.tile(self.fc,(self.Npts,1))self.lasso=LassoSelector(ax,onselect=self.onselect)self.ind=[]defonselect(self,verts):path=Path(verts)self.ind=np.nonzero(path.contains_points(self.xys))[0]self.fc[:,-1]=self.alpha_otherself.fc[self.ind,-1]=1self.collection.set_facecolors(self.fc)self.canvas.draw_idle()defdisconnect(self):self.lasso.disconnect_events()self.fc[:,-1]=1self.collection.set_facecolors(self.fc)self.canvas.draw_idle()if__name__=='__main__':importmatplotlib.pyplotasplt# Fixing random state for reproducibilitynp.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)defaccept(event):ifevent.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()

References

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

Gallery generated by Sphinx-Gallery