使用matplotlib返回鼠标单击事件的坐标

时间:2018-08-22 05:10:54

标签: python matplotlib onclick mouseevent

我想绘制一个函数,单击两个点,然后将我单击的位置的坐标返回给我。然后,在同一程序中,使用那些返回的坐标作为积分限制。

之前,有人问过一个几乎相同的问题(Store mouse click event coordinates with matplotlib)。

以下是给出的答案之一:

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):
    #ix, iy
    ix, iy = event.xdata, event.ydata
    print 'x = %d, y = %d'%(
        ix, iy)

    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)
print "coordinates = ", coords

#then from here I'd do integration based on the returned coordinates

使用该代码给出坐标,但仅在控制台中,而不在程序中。例如。如果运行程序后在控制台中输入coords,则会得到包含坐标的列表。但是线

print "coordinates = ", coords
主程序中的

给出一个空列表coordinates = []

如何在主程序中输出坐标?我玩过Global,但是我真的不知道自己在做什么。

类似if cid is finished, then print coords的东西吗?我不知道该怎么做。

链接问题(https://stackoverflow.com/a/25561863/2794601)的答案使用

coords[0][0]

但是当我运行它时,这对我不起作用。我更新了matplotlib。

编辑:

ginput()是一个潜在的解决方案。这将输出您单击的位置的坐标,并按照我在上面的意思在“程序中”使用。一个限制是您不能放大或缩小它,因为这算作按钮单击。另一个用户发布了一个解决方案,您可以在其中使用滚轮(https://stackoverflow.com/a/47116271/2794601)进行缩放。这可行,但是有点粗糙-我现在想知道是否有更整洁的方法。我会继续思考/玩转这个。

0 个答案:

没有答案