禁用matplotlib的默认箭头键绑定

acd*_*cdr 5 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)
Run Code Online (Sandbox Code Playgroud)

现在按左键将打印Left!到控制台。但是,当我们放大图中时,左键也将“返回”并缩小。(右键将“前进”并放大。)我希望这种情况不会发生-我该怎么做?获得on_key_press回报False并不能解决问题。

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

tac*_*ell 5

删除所有默认键绑定

fig = plt.gcf()
fig.canvas.mpl_disconnect(fig.canvas.manager.key_press_handler_id)
Run Code Online (Sandbox Code Playgroud)

但是,当您需要手术刀时,可以使用大锤。查看处理程序函数,默认键绑定从rcparams中拉出,因此

import matplotlib as mpl
mpl.rcParams['keymap.back'].remove('left')
mpl.rcParams['keymap.forward'].remove('right')
Run Code Online (Sandbox Code Playgroud)

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

如果值不在列表中(例如,您的用户已将其重新映射),则这些remove调用可能会被包裹起来,try...except因为它们会上升。可能值得遍历处理程序使用的所有rcparams以确保它们没有冲突。