[英]Follow up question to: pick_event to get a point using matplotlib
我真的是python新手。 我对此有一个后续问题( pick_event使用matplotlib求助 ):
我有一些数据点,我想选择一个具有某种功能的数据点,然后在以后使用变量工作区进行处理。
所以我想保存,不仅要打印变量。 我怎样才能做到这一点? 我尝试了几种不同的方法(腌制效果几乎正确),但不幸的是,它总是落后一步。 因此,当我实际运行脚本时,它将从我的上次选择中获取数据,而不是实际选择的数据。 我认为这与时间有关
fig.canvas.mpl_connect('pick_event', onpick)
被执行。 但是我真的不知道该如何处理。 非常感谢您的帮助!
我的代码如下所示:
import numpy as np
import matplotlib.pyplot as plt
import pickle
def onpick(event):
thisline = event.artist
xdata = thisline.get_xdata()
ydata = thisline.get_ydata()
ind = event.ind
points = tuple(zip(xdata[ind], ydata[ind]))
example_dict = {points}
pickle_out = open("point.pickle","wb")
pickle.dump(example_dict, pickle_out)
pickle_out.close()
print('onpick points:', points)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_title('click on points')
line = ax.plot(np.random.rand(100), 'o', picker=5) # 5 points tolerance
plt.show()
fig.canvas.mpl_connect('pick_event', onpick)
pickle_in = open("point.pickle","rb")
point = pickle.load(pickle_in)
print('After picking:')
print(point)
您的代码从上次选择中获取数据,因为您在运行脚本时所做的第一件事不是选择数据(然后将其腌制),而是从上次运行脚本时读取的腌制数据。 这也是为什么在您第一次运行脚本(或重命名pickle文件)时会出现错误的原因,因为它试图读取尚不存在的pickled数据文件。
通过在线onpick
连接 onpick
功能
fig.canvas.mpl_connect('pick_event', onpick)
您尚未调用它。 您仅在选择时调用它,届时正在读取您的腌制数据的代码部分将已经执行。 要在选择后真正得到腌制的东西,必须调用此代码
point = pickle.load(open("point.pickle","rb"))
print('After picking:')
print(point)
在onpick
函数内部或仅在您实际选择一个点后才触发的另一个函数中(例如,连接将打印出腌制数据的'key_press_event'
)。
编辑
例如,您的代码可能如下所示:
import numpy as np
import matplotlib.pyplot as plt
import pickle
def onpick(event):
thisline = event.artist
xdata = thisline.get_xdata()
ydata = thisline.get_ydata()
ind = event.ind
points = tuple(zip(xdata[ind], ydata[ind]))
example_dict = {points}
pickle_out = open("point.pickle","wb")
pickle.dump(example_dict, pickle_out)
pickle_out.close()
print('onpick points:', points)
postProcess()
def postProcess():
pickle_in = open("point.pickle","rb")
point = pickle.load(pickle_in)
print('After picking:')
print(point)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_title('click on points')
line = ax.plot(np.random.rand(100), 'o', picker=5) # 5 points tolerance
plt.show()
fig.canvas.mpl_connect('pick_event', onpick)
现在,当您用鼠标单击选择一个点,然后按“ p”以显示腌制文件中存储的内容时,您会看到您实际上在正确地存储数据,只是没有在正确的时间读取数据。
编辑2:编辑代码,以便您不必按任何键即可处理数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.