有没有一种方法可以覆盖 matplotlibs 矩形缩放,使其仅在一维上缩放,这样它的行为就像 MATLAB 一样,无需按住 X 或 Y?

问题描述 投票:0回答:1

这篇文章提出了类似的问题:link

答案是在按住 X 或 Y 的同时绘制一个框以仅放大该维度。在 MATLAB 中,您可以在绘制薄矩形框时执行此类缩放。在绘制盒子时,我希望仅在 X 维度(如果是薄水平盒子)或 Y 维度(如果是薄垂直盒子)进行缩放,因为这对于 MATLAB 用户来说更为熟悉。有没有办法为矩形缩放编写自己的缩放功能?

python matlab matplotlib
1个回答
0
投票

确实,您可以覆盖 Matplotlib 的矩形缩放行为以放大一维(X 或 Y),但您需要修改缩放操作的事件处理程序。默认情况下,Matplotlib 的矩形缩放 会在两个维度上进行缩放,但您可以自定义此行为。

# Custom zoom function to only zoom in the X direction
def zoom_factory(ax, zoom='x'):
   def zoom_event(event):
       # Get current limits
       xlim = ax.get_xlim()
       ylim = ax.get_ylim()
    
       # Get coordinates of the zoom rectangle
       x0, y0 = event.xdata, event.ydata
       x1, y1 = ax.transData.inverted().transform((event.x, event.y))
       
       if zoom == 'x':  # Only zoom in X direction
           ax.set_xlim([min(x0, x1), max(x0, x1)])
           ax.set_ylim(ylim)  # Keep Y limits unchanged
       elif zoom == 'y':  # Only zoom in Y direction
           ax.set_xlim(xlim)  # Keep X limits unchanged
           ax.set_ylim([min(y0, y1), max(y0, y1)])
    
       ax.figure.canvas.draw_idle()

return zoom_event
© www.soinside.com 2019 - 2024. All rights reserved.