我尝试在matplotlib中实现一个简单的鼠标点击事件。我希望绘制一个图形,然后使用鼠标选择积分的下限和上限。到目前为止,我能够将坐标打印到屏幕上,但不能将其存储在程序中供以后使用。我还希望在第二次鼠标点击后退出与图形的连接。
下面是当前绘图并打印坐标的代码。
我的问题:
如何将坐标从图形存储到列表中?例如,单击= [xpos,ypos]
有没有可能得到两组x坐标,来对这段线段做一个简单的积分?
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-10,10)
y = x**2
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x,y)
def onclick(event):
global ix, iy
ix, iy = event.xdata, event.ydata
print 'x = %d, y = %d'%(
ix, iy)
global coords
coords = [ix, iy]
return coords
for i in xrange(0,1):
cid = fig.canvas.mpl_connect('button_press_event', onclick)
plt.show()
3条答案
按热度按时间zbsbpyhn1#
mpl_connect只需要调用一次就可以将事件连接到事件处理程序。它将开始侦听click事件,直到断开连接。您可以使用
以断开事件挂钩。
你要做的事情是这样的:
kmpatx3s2#
感谢otterb提供了答案!我在这里添加了一个小函数... Find nearest value in numpy array
在所有这些代码将绘图,等待选择的x点,然后返回指数的x阵列所需的任何积分,求和等。
谢谢
vmjh9lq93#
我想在这里提供一个不同的答案,因为我最近尝试做事件处理,但这里的解决方案不区分缩放,平移和点击,一切都搞砸了在我的情况下.我发现一个matplotlib的扩展名为mpl_point_clicker,它真的很适合我,可以安装pip(与python 3.X).以下是他们的文档的基本用法:
单击3次后的图和输出如下所示
输出: