class PointSelector: def __init__(self, tracker, ax, collection, alpha, alpha_other=0.2): self.tracker = tracker self.ax = ax self.collection = collection self.fc = collection.get_facecolors() self.alpha = alpha self.alpha_other = alpha_other self.lasso = LassoSelector(ax, onselect=self.on_select) self.is_connected = True self.toggle() def on_select(self, verts): path = Path(verts) xy = self.collection.get_offsets() self.tracker.picked = list(np.nonzero(path.contains_points(xy))[0]) self.fc[:, -1] = self.alpha_other self.fc[self.tracker.picked, -1] = self.alpha self.collection.set_color(self.fc) self.tracker.display_traces() self.tracker.fig.canvas.draw_idle( ) # Force wx backend to redraw the figure def toggle(self, *args): if self.is_connected: self.disconnect() else: self.reconnect() def disconnect(self): self.lasso.disconnect_events() self.is_connected = False self.tracker.picked = [] self.tracker.picked_pair = [] self.fc[:, -1] = self.alpha self.collection.set_color(self.fc) self.tracker.display_traces(only_picked=False) self.tracker.fig.canvas.draw_idle( ) # Force wx backend to redraw the figure def reconnect(self): self.lasso.connect_default_events() self.is_connected = True