在不更改缩放比例的情况下更改图形限制

Change figure limits without changing zoom

我有一个 GUIDE GUI,其中包含我最初设置适当限制的轴:

set(axes,'YLim',[ymin ymax]);

在某一时刻,我以编程方式设置轴以使用

动态调整限制
axes.YLimMode = 'auto';

在另一点上,我想以编程方式将轴设置为再次具有固定限制

axes.YLimMode = 'manual';
set(axes,'YLim',[ymin ymax]);

问题:此时我想通过适当的缩放来保持轴的当前可见部分(用户可以通过缩小工具将其缩小) .如何实现?

最后发现很简单:

axes.XLimMode = 'manual';
axes.YLimMode = 'manual';

% save current "zoomed in" limits (not needed if you want to set other values later)
xcur = axes.XLim;
ycur = axes.YLim;

% set axes limits to desired "zoomed out" state
set(axes,'XLim',[xmin xmax]);
set(axes,'YLim',[ymin ymax]);
zoom(figure,'reset'); % sets and remembers current state as "zoomed out state"

% restore (or set freely) "zoomed in" limits
set(axes,'XLim',xcur);
set(axes,'YLim',ycur);

重要的部分是zoom(figure,'reset');,它在内部将当前限制设置为最大缩小状态。然后可以(以编程方式)通过为 XLim/YLim 设置任意值来放大。但是,用户仍然可以手动缩小,直到达到之前设置的最大缩小状态(当省略 zoom 命令时 not 是可能的)。