使用matplotlib存储鼠标单击事件坐标

smashbro:

我正在尝试在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()
水獭:

仅需调用一次mpl_connect即可将事件连接到事件处理程序。它将开始监听点击事件,直到您断开连接。你可以使用

fig.canvas.mpl_disconnect(cid)

断开事件挂钩。

您想要做的是这样的:

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)

coords = []

def onclick(event):
    global ix, iy
    ix, iy = event.xdata, event.ydata
    print 'x = %d, y = %d'%(
        ix, iy)

    global coords
    coords.append((ix, iy))

    if len(coords) == 2:
        fig.canvas.mpl_disconnect(cid)

    return coords
cid = fig.canvas.mpl_connect('button_press_event', onclick)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章