我一直在努力创建一个交互式绘图选择器,我有3个不同的pick_events。这些pick_events在每个中都有计算。我想按“1”,“2”或“3”,这将是相应的pick_event的模式,我希望它保持在该模式,直到按下另一个模式。到目前为止,我已经尝试过这段代码了,但我对OOP缺乏经验并且正在努力学习。
class MyClick(object):
def __init__(self):
def pick(self, event):
artist = event.artist
xmouse, ymouse = event.mouseevent.xdata, event.mouseevent.ydata
self.x, self.y = np.array(artist.get_xdata()),np.array(artist.get_ydata())
self.ind = event.ind
#self.maxind = self.y[self.ind].argsort()[-1:] #[::-1]
#axes.plot(x[ind[self.maxind]],y[ind[self.maxind]],'*')
#figure.canvas.draw()
def press(self, event):
sys.stdout.flush()
if event.key == '1':
# peak
self.maxind = self.y[self.ind].argsort()[-1:] #[::-1]
print(y[ind[self.maxind]])
elif event.key == '2':
# onset
print('onset')
elif event.key == '3':
# offset
print('offset')
else:
print('wrong key press')
if __name__ == "__main__":
figure = plt.figure()
axes = figure.add_subplot(1, 1, 1)
data_plot, = axes.plot(Frame, R_Fz_dn_bc , picker=5) #plot data
axes.autoscale(tight=True)
browser = MyClick()
cid = figure.canvas.mpl_connect('pick_event', browser.pick)
cid = figure.canvas.mpl_connect('key_press_event', browser.press)
plt.show()
我省略了一些不涉及此问题的代码。我已尝试制作3种不同的选择器功能,但也试图在每个按键事件功能中制作一个选择器功能和计算。任何帮助都将是一个巨大的赞赏。几个星期以来,我一直在努力解决这个问题。我也在寻找一种方法来在一个numpy数组中选择点,这样我以后可以做其他的计算。
谢谢!
PS:如果有关于此的上一个主题,我道歉。如果有我的话,我还没有找到任何东西!
答案 0 :(得分:0)
您可以使用press()
方法记录作为MyClick
实例的属性按下的最后一个键,然后在pick()
方法中检查当前处于活动状态的模式并执行任何计算是合适的:
class MyClick(object):
def __init__(self):
# initialize mode
self._mode = 1
def pick(self, event):
"""do some calculation depending on the last key pressed"""
if self._mode == 1:
# do something...
pass
elif self._mode == 2:
# do something different...
pass
elif self._mode == 3:
# do something else entirely...
pass
def press(self, event):
"""record last key pressed"""
if event.key == '1':
self._mode = 1
elif event.key == '2':
self._mode = 2
elif event.key == '3':
self._mode = 3