我真的是python新手。 我对此有一个后续问题(pick_event to get a point using 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)
答案 0 :(得分:0)
您的代码从上次选择中获取数据,因为运行脚本时您要做的第一件事不是选择数据(然后将其腌制),而是您从上次运行代码时读取了腌制数据脚本。这也是为什么在您第一次运行脚本(或重命名泡菜文件)时会出错的原因,因为该脚本试图读取尚不存在的泡菜数据文件。
通过连接该行中的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”以显示腌制文件中存储的内容时,您会看到实际上实际上在正确地存储数据,只是不是< em>在正确的时间阅读。
编辑2: 编辑了代码,因此您无需按任何键即可处理数据。