web-dev-qa-db-ja.com

MATLAB-サブプロットを一緒にズームする方法は?

1つの図に複数のサブプロットがあります。各プロットのX軸は同じ変数(時間)です。各プロットのY軸は異なります(それが表すものとデータの大きさの両方)。

すべてのプロットの時間スケールを同時に拡大する方法が必要です。理想的には、プロットの1つで長方形ズームツールを使用し、それに応じて他のプロットのX制限を変更します。 Yの制限は、これらすべてについて変更されないままにする必要があります。 Y方向のプロットを埋めるためにデータを自動フィッティングすることは許容されます。

(この質問はStack Overflowの質問1とほぼ同じです。 Matplotlib/Pyplot:サブプロットを一緒にズームするには?[〜#〜] matlab [〜#〜を除く] ))

47
Miebster

組み込みの linkaxes 関数を次のように使用します。

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

(x軸またはy軸だけでなく)より高度なリンクを作成するには、組み込みの linkprop 関数を使用します

44
Yair Altman

YairとAmroが既に提案したように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

すべてのサブプロットを同時にズームインできるはずです

多数のサブプロットがあり、軸ハンドルを1つずつ収集するのが賢明な方法とは思えない場合は、次のコマンドで、指定されたFigureハンドル内のすべての軸ハンドルを見つけることができます。

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' );

最初の行は、タイプが「axes」で空タグ( '')のfigure_handleの下にあるすべてのオブジェクトを検索します。空のタグの条件は、凡例のaハンドルを除外することです。凡例のタグはlegendになります。

単なるプロット以上のものである場合、Figureには他のAxesオブジェクトが存在する可能性があります。このような場合、関心のあるプロットの軸ハンドルを識別するために、さらに条件を追加する必要があります。

28
YYC

一対の図をlinkaxesとリンクするには:

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