禁用matplotlib的默认箭头键绑定

时间:2016-02-25 10:09:13

标签: python matplotlib

使用matplotlib的mpl_connect功能,可以将事件绑定到函数调用。但是,左右箭头键默认绑定在图的历史记录中“后退”和“前进”。我想禁用此默认绑定。

例如:

import matplotlib.pyplot as plt

def on_key_press(event):
    if event.key == "left":
        print("Left!")
    elif event.key == "right":
        print("Right!")

plt.plot([0, 1, 2, 3, 4], [5, 2, 1, 2, 5])
plt.gcf().canvas.mpl_connect("key_press_event", on_key_press)

按左键现在将Left!打印到控制台。但是,当我们放大图形时,左键也会“返回”,然后缩小。 (右键将“向前”并放大。)我希望这不会发生 - 我该怎么做?让on_key_press返回False并不起作用。

(背景信息:我设置了绑定,以便当用户点击图形时,将出现一个光标,以绘制点为中心(由[0,1,2,3,4]和[0]给出5,2,1,2,5])最接近用户点击的位置。我可以使左右键将此光标移动到上一个/下一个数据点,但如果用户恰好放大了,或者对图表做了任何其他操作,事情变坏了。)

2 个答案:

答案 0 :(得分:4)

删除所有默认密钥绑定

fig = plt.gcf()
fig.canvas.mpl_disconnect(fig.canvas.manager.key_press_handler_id)
然而,当你需要手术刀时,这是使用大锤。查看handler function默认键绑定是从rcparams中提取的,所以

import matplotlib as mpl
mpl.rcParams['keymap.back'].remove('left')
mpl.rcParams['keymap.forward'].remove('right')

将仅停用'left''right'键。

这些remove调用应该包含在try...except中,因为如果值不在列表中,它们将会引发(例如,您的用户已经重新映射它们)。可能值得循环处理程序使用的所有rcparams,以确保它们的 none 冲突。

答案 1 :(得分:0)

为了找到其他Key映射......

  import matplotlib as mpl 
    for k,v in mpl.rcParams.items():
      if -1 != k.find("keymap"):
        print "rcParams[%s]=%s"%(k,v)