To expand on what @tcaswell said, see the documentation here: http://matplotlib.org/users/event_handling.html
However, you might find a quick demo of pick events useful:
import matplotlib.pyplot as plt
def on_pick(event):
artist = event.artist
xmouse, ymouse = event.mouseevent.xdata, event.mouseevent.ydata
x, y = artist.get_xdata(), artist.get_ydata()
ind = event.ind
print 'Artist picked:', event.artist
print '{} vertices picked'.format(len(ind))
print 'Pick between vertices {} and {}'.format(min(ind), max(ind)+1)
print 'x, y of mouse: {:.2f},{:.2f}'.format(xmouse, ymouse)
print 'Data point:', x[ind[0]], y[ind[0]]
print
fig, ax = plt.subplots()
tolerance = 10 # points
ax.plot(range(10), 'ro-', picker=tolerance)
fig.canvas.callbacks.connect('pick_event', on_pick)
plt.show()
Exactly how you approach this will depend on what artist you're using (In other words, did you use ax.plot
vs. ax.scatter
vs. ax.imshow
?).
Pick events will have different attributes depending on the artist selected. There will always be event.artist
and event.mouseevent
. Most artists that have individual elements (e.g. Line2D
s, Collections
, etc) will have a list of the index of the items selected as event.ind
.
If you'd like to draw a polygon and select points inside, see: http://matplotlib.org/examples/event_handling/lasso_demo.html#event-handling-example-code-lasso-demo-py
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…