python - Matplotlib 缩放级别在按键事件上后退
问题描述
我想通过放大图形在我的 matplotlib 图形中选择一个区域,然后当按下“c”键时,获取当前轴限制。
但是,在按键事件中,图形会自动将缩放级别回退一步。因此,当调用回调函数时,它会获取上一个缩放级别的轴限制(即,如果我只缩放一次,则为“home”限制,或者如果我缩放不止一次,则为倒数第二个缩放级别)。
我想也许得到轴限制会干扰所说的限制,但是在回调函数中什么都不做没有区别,这个数字仍然被缩小了。
为什么会这样,如何避免呢?
下面是最少的代码:运行这个,在图形上缩放一次,按 c,回调将打印-0.35000000000000003 7.35 -0.25 5.25
,对应于初始图形设置,无论您选择的缩放是什么。
import matplotlib.pyplot as plt
class CropZoneFinder:
def __init__(self, fig):
# Prepare the graphics
self.figure = fig
self.figure.canvas.mpl_connect('key_press_event', self)
plt.show()
def __call__(self, event):
"""
This is the callback function used by matplotlib figure to handle input
"""
if event.key == 'c':
xlims = self.figure.get_axes()[0].get_xlim()
ylims = self.figure.get_axes()[0].get_ylim()
xleft = xlims[0]
xright = xlims[1]
yleft = ylims[0]
yright = ylims[1]
print(xleft, xright, yleft, yright)
if __name__ == "__main__":
fig, ax = plt.subplots()
ax.plot([0,1,2,3,4,5,4,3])
cropfinder = CropZoneFinder(fig)
解决方案
答案是因为键c
是交互式导航热键的一部分。
解决方法很简单:重新配置与back相关的keymap。
import matplotlib as mpl
...
if __name__ == "__main__":
fig, ax = plt.subplots()
mpl.rcParams["keymap.back"] = ['left', 'backspace']
ax.plot([0,1,2,3,4,5,4,3])
cropfinder = CropZoneFinder(fig)
推荐阅读
- flutter - 进入管理页面前有插曲和阅读登录页面
- javascript - 从输入中获取用户输入的价值
- php - 增加 Google Cloud Platform Kubernetes Wordpress Click-to-Deploy 上的 PHP.ini 文件上传限制
- node.js - Express Get Routes 无法接收 404
- javascript - 我的函数在第一条语句后没有返回运行
- python - CNN train with weird result: VAL LOSS increases while VAL ACCURACY / PRECISION / RECALL also increase
- selenium - Trying to click a button with Selenium Webdriver using Cucumber-JS
- html - CSS background color not showing up
- c# - How to Register Permission to the database and grant to a role in asp.net boilerplate
- c# - Redirect to Login wrong when running .NET Core 3.1 on Elastic Beanstalk