繁体   English   中英

跟进问题:pick_event使用matplotlib取得要点

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM