2016-11-20 13 views
0

私はいくつかの図をプロットしており、それらを複数回保存して特定の領域を拡大したい。私のすべてのビューは、最後のビューを除いて、y = 0のピボットポイントを持っています。私は 'XLim'を使ってX軸のビューを変更しています。今私は、Y軸上のビューをパンする必要があります。 YLimを使用すると、画像の縦横比が変わります。Matlab:図形をプログラムでパンする

Y軸にピボット点を設定することはできますか?

ここに私の問題が見られる最小の作業コードがあります。 2回休止します。

f1 = figure(10); 
hold on 
axis equal 
x = linspace(1,2*pi); 
y = sin(x); 
plot(x,y,'*') 
xlims=[0 2*pi; 1 2*pi; 0.5 1.5]; 

for i = 1:size(xlims,1) 
    set(gca,'XLim',xlims(i,:)) 
    disp('Here I am saving this view! (Paused)') 
    pause 
end 

% Now I want to PAN the Y axis and set the view around Y = 1. 
% But still keep last set Xlims AND keep the aspect ratio of figure. 
% When using YLim, the aspect ratio changes. 

set(gca,'YLim',[0.9 1.1]) % Not what I have in mind. 
% Just need to pivot Y=1... 
+1

'set(gca、 'YLim'、get(gca、 'YLim')+ dy)'の何が問題なのですか? – jodag

+0

これは完全に機能します!ありがとうございました...なぜ私は現在の「イルム」を取得し、変更してyの変更を加えることを考えなかったのですか? – Bjartmar

答えて

0

「パンニング」コマンドはありません。 (panコマンドがありますが、これはマウスのオンまたはオフを使用してパンする機能を単に切り替えます)。

しかし、axis関数を使用して、表示するプロットの部分を手動で指定した制限で指定するように軸制限を設定する機能があります。

この形状/(例えばaxis square又はaxis equal)アスペクト比に影響を与える他のaxis呼び出し後に適用される場合axis([ xmin, xmax, ymin, ymax ]);

さらに、これらは保存されます。

特定の例では、axis equalを使用すると、より小さな範囲のYの場合は、アスペクト比が小さくなることになります。したがって、あなたはそれに反対することができます。

また、daspect機能で手動でアスペクト比を制御することもできます。例えば、あなたの例では:

>> axis equal % your initial axis/aspect ratio situation 
>> A = axis; 
>> axis([0.5,1.5,0.9,1.1]); % your new values. aspect ratio will change to preserve equality 
>> B = axis; 
>> Y_factor = (A(4)-A(3))/(B(4)-B(3)); 
>> daspect([Y_factor, 1, 1]); % back to the old "aspect ratio" 

しかし、これは明らかに二つの軸が現在「等しい」ではない、と以前のグラフとの比較は誤解を招くかもしれないことを意味しています。これは考慮する要因であるかもしれないし、そうでないかもしれない。最後に

、何が本当に後にしていることは、あなたの軸のサイズを変更しないオブジェクトを、あなたは、単にあなたの軸のサイズは(set(gca, 'position', [x,y,x_width, y_width])など)を手動でオブジェクトを設定することができていることを確認し、軸がnormalモードであることを確認するだけであれば(つまり、軸の大きさに適応する)。

関連する問題