matplotlib强制将平移/缩放限制为x轴
问题内容:
Matplotlib具有一项功能,如果您按住“ x”或“ y”键,它将约束平移或缩放到相应的轴。
有没有办法使它成为默认值? 由于某些原因,按住字母键时,我的CPU不允许触摸板移动。我只希望x轴平移/缩放,而不希望y轴。
编辑:在https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/axes.py#L3001找到了pan
/
zoom功能
其中包含一个内部函数format_deltas
。但是我不知道当从Figure对象自动创建Axes对象时,如何用子类覆盖Axes类。
问题答案:
可以使用自己的轴类。在您的情况下,您可以从方法继承matplotlib.axes.Axes
并更改drag_pan
方法,使其始终像按“
x”键一样起作用。但是,缩放似乎并未在该类中定义。以下内容仅允许x轴平移:
import matplotlib
import matplotlib.pyplot as plt
class My_Axes(matplotlib.axes.Axes):
name = "My_Axes"
def drag_pan(self, button, key, x, y):
matplotlib.axes.Axes.drag_pan(self, button, 'x', x, y) # pretend key=='x'
matplotlib.projections.register_projection(My_Axes)
figure = plt.figure()
ax = figure.add_subplot(111, projection="My_Axes")
ax.plot([0, 1, 2], [0, 1, 0])
plt.show()
对于缩放,您可能必须查看工具栏控件本身。该NavigationToolbar2类有drag_zoom
这似乎是有什么与此有关的方法,但跟踪它是如何工作很快被事实,即不同的后端都有自己的版本(如复杂NavigationToolbar2TkAgg
编辑
您 可以通过以下方式 猴子补丁所需的行为:
import types
def press_zoom(self, event):
event.key='x'
matplotlib.backends.backend_tkagg.NavigationToolbar2TkAgg.press_zoom(self,event)
figure.canvas.toolbar.press_zoom=types.MethodType(press_zoom, figure.canvas.toolbar)
您可以正确地做它并成为工具栏的子类,但是您必须然后创建Figure,FigureCanvas和NavigationToolbar的实例,并将它们放入Tk应用程序或其他东西中。我认为没有一种真正简单的方法可以通过简单的绘图界面使用自己的工具栏。