MATLAB – 如何将子图一起缩放?

我在一个图中有多个子图。 每个图的X轴是相同的variables(时间)。 每个绘图上的Y轴是不同的(无论是它所代表的和数据的大小)。

我想要一个方法来放大所有情节的时间尺度同时。 理想情况下,通过在其中一个地块上使用矩形缩放工具,并让其他地块相应地更改其X限制。 Y的限制应该保持不变。 自动拟合数据在Y方向填充图是可以接受的。

(这个问题是几乎相同的堆栈溢出问题之一Matplotlib / Pyplot:如何缩放在一起的子图 (除了MATLAB ))

使用内置的linkaxesfunction如下:

linkaxes([hAxes1,hAxes2,hAxes3], 'x'); 

对于更高级的链接(不只是x或y轴),使用内置的linkprop函数

Yair和Amro已经build议使用linkaxes了。 以下是您的案例的一个简单例子

 ha(1) = subplot(2,1,1); % get the axes handle when you create the subplot plot([1:10]); % Plot random stuff here as an example ha(2) = subplot(2,1,2); % get the axes handle when you create the subplot plot([1:10]+10); % Plot random stuff here as an example linkaxes(ha, 'x'); % Link all axes in x 

您应该能够同时放大所有的子图

如果有多个子图,并且逐个采集它们的轴线处理看起来不是一个聪明的方法,那么可以通过以下命令find给定graphics手柄中的所有轴手柄

 figure_handle = figure; subplot(2,1,1); plot([1:10]); subplot(2,1,2); plot([1:10]+10); % find all axes handle of type 'axes' and empty tag all_ha = findobj( figure_handle, 'type', 'axes', 'tag', '' ); linkaxes( all_ha, 'x' ); 

第一行查找types为“axes”和空标记(“')的figure_handle下的所有对象。 空标签的条件是排除图例的斧柄,其标签将是legend

如果graphics不仅仅是一个简单的graphics,还可能有其他的轴对象。 在这种情况下,您需要添加更多条件来识别您感兴趣的图的轴手柄。

链接一对数字与linkaxes使用:

 figure;imagesc(data1); f1h=findobj(gcf,,'type','axes') figure;imagesc(data2); f2h=findobj(gcf,,'type','axes') linkaxes([f1h,f2h],'xy')