Observação
Clique aqui para baixar o código de exemplo completo
Demonstração de laço #
Mostre como usar um laço para selecionar um conjunto de pontos e obter os índices dos pontos selecionados. Um retorno de chamada é usado para alterar a cor dos pontos selecionados
Esta é atualmente uma implementação de prova de conceito (embora seja utilizável como está). Haverá algum refinamento da API.
Observação
Este exemplo exercita os recursos interativos do Matplotlib e isso não aparecerá na documentação estática. Por favor, execute este código em sua máquina para ver a interatividade.
Você pode copiar e colar partes individuais ou baixar o exemplo inteiro usando o link na parte inferior da página.

from matplotlib import colors as mcolors, path
from matplotlib.collections import RegularPolyCollection
import matplotlib.pyplot as plt
from matplotlib.widgets import Lasso
import numpy as np
class Datum:
    colorin = mcolors.to_rgba("red")
    colorout = mcolors.to_rgba("blue")
    def __init__(self, x, y, include=False):
        self.x = x
        self.y = y
        if include:
            self.color = self.colorin
        else:
            self.color = self.colorout
class LassoManager:
    def __init__(self, ax, data):
        self.axes = ax
        self.canvas = ax.figure.canvas
        self.data = data
        self.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,
            offset_transform=ax.transData)
        ax.add_collection(self.collection)
        self.cid = self.canvas.mpl_connect('button_press_event', self.on_press)
    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.colorin
            else:
                facecolors[i] = Datum.colorout
        self.canvas.draw_idle()
        self.canvas.widgetlock.release(self.lasso)
        del self.lasso
    def on_press(self, event):
        if self.canvas.widgetlock.locked():
            return
        if event.inaxes is None:
            return
        self.lasso = Lasso(event.inaxes,
                           (event.xdata, event.ydata),
                           self.callback)
        # acquire a lock on the widget drawing
        self.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()