Matplotlib/python可点击点

int*_*ntl 5 python plot graph matplotlib

我有一堆时间序列数据,每5秒就有一个点数.因此,我可以创建一个线图,甚至可以平滑数据以获得更平滑的图.问题是,在matplotlib或python中的任何方法中是否有任何方法可以让我点击有效点来做某事?因此,例如,如果我的原始数据中存在该数据,那么我将能够点击(10,75),然后我就可以在Python中执行某些操作.

有什么想法吗?谢谢.

Joe*_*ton 11

要扩展@tcaswell所说的内容,请参阅此处的文档:http://matplotlib.org/users/event_handling.html

但是,您可能会发现有用的选择事件的快速演示:

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()
Run Code Online (Sandbox Code Playgroud)

你究竟如何处理这将取决于你正在使用什么艺术家(换句话说,你使用ax.plotvs ax.scattervs. ax.imshow?).

挑选事件将根据所选的艺术家具有不同的属性.永远都会event.artistevent.mouseevent.大多数具有单独元素的艺术家(例如,Line2Ds Collections等)将具有所选项目的索引列表event.ind.

如果您想绘制多边形并选择内部点,请参阅:http://matplotlib.org/examples/event_handling/lasso_demo.html#event-handling-example-code-lasso-demo-py