Using key_press_event to select a 'mode' for different types of pick_event
Using key_press_event to select a 'mode' for different types of pick_event
我一直在努力创建一个交互式绘图选择器,其中我有 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: 如果之前有关于这个的话题,我很抱歉。我还没有找到任何东西,如果有的话请指点我!
您可以使用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
我一直在努力创建一个交互式绘图选择器,其中我有 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: 如果之前有关于这个的话题,我很抱歉。我还没有找到任何东西,如果有的话请指点我!
您可以使用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