我在一个图中有多个子图。每个图的X轴是相同的变量(时间)。每个图上的Y轴都不同(包括它代表的数据和数据的大小)。
我想要一种同时放大所有绘图的时间尺度的方法。理想情况下,通过在其中一个图上使用矩形缩放工具,并使其他图相应地更改其X限制。对于所有这些,Y限制应该保持不变。自动拟合数据以在Y方向上填充图表是可以接受的。
(此问题几乎与Stack Overflow第一个问题 Matplotlib/Pyplot: How to zoom subplots together? 相同(MATLAB除外))
答案 0 :(得分:44)
答案 1 :(得分:28)
使用linkaxes
作为Yair和Amro已经建议。以下是您案例的快速示例
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
您应该能够同时放大所有子图
如果有许多子图,并且逐个收集它们的轴手柄似乎不是一个聪明的方法来完成这项工作,你可以通过以下命令找到给定图形句柄中的所有轴柄
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' );
第一行找到figure_handle
类型为“axes”的所有对象和空标记('')。空标记的条件是排除图例的斧柄,其标记为legend
。
如果它不仅仅是一个简单的情节,你的图中可能还有其他的轴对象。在这种情况下,您需要添加更多条件来识别您感兴趣的图的轴控制柄。
答案 2 :(得分:0)
要使用链接链接一对数字,请使用:
figure;imagesc(data1);
f1h=findobj(gcf,,’type’,’axes’)
figure;imagesc(data2);
f2h=findobj(gcf,,’type’,’axes’)
linkaxes([f1h,f2h],’xy’)