python - 禁用 matplotlib 的默认箭头键绑定(bind)

标签 python matplotlib

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

例如:

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 并不能解决问题。

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

最佳答案

删除所有默认键绑定(bind)

fig = plt.gcf()
fig.canvas.mpl_disconnect(fig.canvas.manager.key_press_handler_id)

然而,当您需要手术刀时,这是在使用大锤。看着 handler function默认的键绑定(bind)是从 rcparams 中提取的,所以

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

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

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

关于python - 禁用 matplotlib 的默认箭头键绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35624183/

相关文章:

python - 在 screen 上记录数据时用 Python 读取文件

python - 为什么带有屏蔽数组的 pcolor 仍然填充连接到屏蔽点的四边形,以及如何阻止这种情况?

python - 如何检查 Python 应用程序是否在 AWS lambda 函数中运行?

python - 用 py2exe 制作的可执行文件不能在 windows xp 32 位上运行

python - 在 Python 中测试所有组合

python - 将多个面板上的绘图标签安排在 matplotlib 中的一行中

python - 尝试将颜色条添加到 Seaborn 散点图

python - 如何让matplotlib/pcolor显示数据的最后一行和最后一列

python - 使用 wnck (python) 确定事件窗口/应用程序失败

python - 如何只保留字母数字和空格,同时忽略非 ASCII?