我想绘制一个函数,单击两个点,然后将我单击的位置的坐标返回给我。然后,在同一程序中,使用那些返回的坐标作为积分限制。
之前,有人问过一个几乎相同的问题(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)进行缩放。这可行,但是有点粗糙-我现在想知道是否有更整洁的方法。我会继续思考/玩转这个。