套索演示
演示如何使用套索选择一组点并获取所选点的索引。回调用于更改所选点的颜色。
这是一个概念验证实现(尽管它可以按原样使用)。将对API进行一些改进。

from matplotlib import colors as mcolors, pathfrom matplotlib.collections import RegularPolyCollectionimport matplotlib.pyplot as pltfrom matplotlib.widgets import Lassoimport numpy as npclass Datum(object):colorin = mcolors.to_rgba("red")colorout = mcolors.to_rgba("blue")def __init__(self, x, y, include=False):self.x = xself.y = yif include:self.color = self.colorinelse:self.color = self.coloroutclass LassoManager(object):def __init__(self, ax, data):self.axes = axself.canvas = ax.figure.canvasself.data = dataself.Nxy = len(data)facecolors = [d.color for d in data]self.xys = [(d.x, d.y) for d in data]self.collection = RegularPolyCollection(6, sizes=(100,),facecolors=facecolors,offsets=self.xys,transOffset=ax.transData)ax.add_collection(self.collection)self.cid = self.canvas.mpl_connect('button_press_event', self.onpress)def callback(self, verts):facecolors = self.collection.get_facecolors()p = path.Path(verts)ind = p.contains_points(self.xys)for i in range(len(self.xys)):if ind[i]:facecolors[i] = Datum.colorinelse:facecolors[i] = Datum.coloroutself.canvas.draw_idle()self.canvas.widgetlock.release(self.lasso)del self.lassodef onpress(self, event):if self.canvas.widgetlock.locked():returnif event.inaxes is None:returnself.lasso = Lasso(event.inaxes,(event.xdata, event.ydata),self.callback)# acquire a lock on the widget drawingself.canvas.widgetlock(self.lasso)if __name__ == '__main__':np.random.seed(19680801)data = [Datum(*xy) for xy in np.random.rand(100, 2)]ax = plt.axes(xlim=(0, 1), ylim=(0, 1), autoscale_on=False)ax.set_title('Lasso points using left mouse button')lman = LassoManager(ax, data)plt.show()
