如何从 matplotlib 的 button_press_event 返回值?
我刚来这里,也刚开始学习Python和matplotlib。
我想写一段代码,能够从一个定义的函数中获取坐标(event.xdata),这样我就可以在后面使用这些数据。但是我了解到,有些变量是局部的(就是在函数内部的那些),而有些是全局的(我们想要在“后面”使用的)。我试过使用'global'选项,但我也听说这不是最好的方法,而且也没有成功……解决办法当然是从定义的选择函数中返回值……问题是我需要创建一个变量来接收这个返回值……但由于这是一个事件(而不是简单的函数),我不能让一个变量来接收返回值,因为这个事件是在图表绘制后发生的。代码应该类似于:
import matplotlib.pyplot as plt
import numpy as np
asd = () #<---- i need to create a global variable before i can return a value in it?
fig = plt.figure()
def on_key(event):
print('you pressed', event.key, event.xdata, event.ydata)
N=event.xdata
return N in asd #<---- i want to return N into asd
cid = fig.canvas.mpl_connect('key_press_event', on_key)
lines, = plt.plot([1,2,3])
NAAN=on_key(event) #<---- just to try if return alone worked... but on_key is a function which happens in the plot event... so no way to take the info from the return
plt.show()
1 个回答
7
你可以通过一个可变对象和闭包来实现这个功能:
mutable_object = {}
fig = plt.figure()
def on_key(event):
print('you pressed', event.key, event.xdata, event.ydata)
N=event.xdata
mutable_object['key'] = N
然后你可以用下面的方式把你的值取出来:
N = mutable_object['key']
利用这个方法,你还可以用一个 list
和 append
来实现,或者自己创建一个类等等。