3

それぞれが散布図を示す(3,4)サブプロットがあります。散布図の範囲はさまざまであるため、一部のプロットには軸x(0-30)とy(0-8)がありますが、一部にはx(18-22)とy(4-7)があります。xlimを[030]に設定し、ylimを[0 8]に設定しましたが、これにより、軸が0より低くなったり、30より高くなったりすることはありません。

各プロットの原点に対して軸を(0,0)に「固定」し、Yの場合は8に、Xの場合は30に「固定」に設定するにはどうすればよいですか。

ヘルプのためのTIA


回答のコメントごとに更新:
以下のコードでも同じ問題が発生します

%% plot

for i = 1:num_bins;

h = zeros(ceil(num_bins),1);

h(i)=subplot(4,3,i);

plotmatrix(current_rpm,current_torque)

end

linkaxes(h,'xy');

axis([0 30 0 8]);
4

1 に答える 1

7

軸の境界をプログラムで設定するには、いくつかの便利なコマンドがあります。

axis([0 30 0 8]);  %Sets all four axis bounds

また

xlim([0 30]);  %Sets x axis limits
ylim([0 8]);   %Sets y axis limits

2 つの x 制限の 1 つだけを設定するには、通常、次のようなコードを使用します。

xlim([0 max(xlim)]);  %Leaves upper x limit unchanged, sets lower x limit to 0

これはxlim、現在の x 制限の配列を返すゼロ入力引数呼び出し規則を利用します。同じことが動作しylimます。

これらのコマンドはすべて現在の軸に適用されることに注意してください。したがって、サブプロットを作成している場合は、Figure を構築するときに軸ごとにスケーリング呼び出しを 1 回実行する必要があります。


もう 1 つの便利な機能はlinkaxesコマンドです。これにより、2 つのプロットの軸の制限が動的にリンクされます。これには、プログラムによるサイズ変更コマンドxlimや、パンやズームなどの UI 操作が含まれます。例えば:

a(1) = subplot(211),plot(rand(10,1), rand(10,1)); %Store axis handles in "a" vector
a(2) = subplot(212),plot(rand(10,1), rand(10,1)): %

linkaxes(a, 'xy');

axis([0 30 0 8]);  %Note that all axes are now adjusted together
%Also try some manual zoom, pan operations using the UI buttons.

コードを見ると、編集後、plotmatrix関数の使用が複雑になっています。 plotmatrix作業する独自の軸を作成しているように見えるため、これらのハンドルをキャプチャして調整する必要があります。(また、将来的h = zeros(..)にはループから抜け出します)。

作成された軸へのハンドルを取得するにはplotmatrix、次のように 2 番目の戻り引数を使用します[~, hAxes]=plotmatrix(current_rpm,current_torque);。次に、将来の使用のためにそれらを収集します。

最後に、axisxlimylimコマンドはすべて現在の軸に作用します ( を参照gca)。ただし、plotmatrix軸は決して最新ではないため、axisコマンドはそれらに影響を与えていません。次のように、作用する軸を指定できます axis(hAxis, [0 30 0 8]);

これをすべてまとめると (コードを実行するためにいくつかの変数定義を追加します)、これは次のようになります。

%Define some dummy variables
current_rpm = rand(20,1)*30;
current_torque = rand(20,1)*8;
num_bins = 12;

%Loop to plot, collecting generated axis handles into "hAllAxes"
hAllAxes = [];
for i = 1:num_bins;
    subplot(4,3,i);
    [~, hCurrentAxes]=plotmatrix(current_rpm,current_torque);
    hAllAxes = [hAllAxes hCurrentAxes];  %#ok
end
linkaxes(hAllAxes,'xy');    
axis(hAllAxes,[0 30 0 8]);
于 2013-03-21T15:38:51.097 に答える