2016-09-08 5 views
2

軸ボックスの正確なサイズと位置を知るにはどうすればいいですか?例えば、軸フレーム/ボックスのIはMATLAB: `axis equal`の場合の軸ボックスの正確なサイズと位置は?

figure 
contourf(x,y,u,100,'linestyle','none') 
axis equal 
set(gca,'position',[0.1,0.1,0.7,0.8]) %normalized units 

を使用する場合、サイズがサイズ変更(又はaxis equalを使用して)Figureウィンドウの場合varyedが、get(gca,'position')の値は不変のままです。例えば:

figure 
Z = peaks(20); 
contourf(Z,10) 
set(gca,'Units','pixels') 

get(gca,'position') 
axis equal 
get(gca,'position') 

ANS = axis equal

0.1300 0.1100 0.7750 0.8150 

、軸ボックスは変更が、get(gca,'position')は同じ座標与えるれる: ANS = Iを整列させるために、これらを必要

0.1300 0.1100 0.7750 0.8150 

axis equalの場合は、カラーボックスを軸ボックスに固定します(間に固定された間隔を使用します)。

+0

あなたの質問は不明であったし、次はあなたがfnid何より簡単に説明します: 'フィギュア Z =ピーク(20 ); contourf(Z、10) セット(GCA、 '単位'、 'ピクセル') のget(GCA、 '位置') 軸は GET(GCA、 '位置')を等しく ' – Oleg

+1

私にあなたの例を追加しました質問。今はっきりしていますか? –

答えて

1

axis equalを呼び出すと、軸ボックスの縦横比は固定され、Positionプロパティは最大サイズとして扱われます。 Figureウィンドウのサイズを変更すると、軸ボックスはPositionの中心にとどまりますが、以前と同じ縦横比を維持するために、Positionの長方形全体を占めることはありません。

Positionの矩形全体を使用したい場合は、axis equalに再度電話をかけることができます。 (これはあなたのMATLABバージョンに依存するかもしれません;それはR2015bで私のために働いていました)。

これについては、もう少し詳しくはon MATLAB Centralで説明します。

元の質問に答えるには、少し複雑です。あなたは(pbaspect()または軸PlotBoxAspectRatioプロパティを使用して)プロットボックスの縦横比を取得し、それを把握する必要があるだろう。これはあなたのピクセル単位でのボックスの位置を与えること

ah = gca(); 
% Get the axes Position rectangle in units of pixels 
old_units = get(ah,'Units'); 
set(ah,'Units','pixels'); 
pos = get(ah,'Position'); 
set(ah,'Units',old_units); 
% Figure the PlotBox and axes Position aspect ratios 
pos_aspectRatio = pos(3)/pos(4); 
box_aspect = pbaspect(ah); 
box_aspectRatio = box_aspect(1)/box_aspect(2); 
if (box_aspectRatio > pos_aspectRatio) 
    % PlotBox is wider than the Position rectangle 
    box_height = pos(3)/box_aspectRatio; 
    box_dy = (pos(4)-box_height)/2; 
    box_position = [pos(1), pos(2)+box_dy, pos(3), box_height]; 
else 
    % PlotBox is taller than the Position rectangle 
    box_width = pos(4) * box_aspectRatio; 
    box_dx = (pos(3)-box_width)/2; 
    box_position = [pos(1)+box_dx, pos(2), box_width, pos(4)]; 
end 

注意を。あなたは軸のデフォルトですnormalized単位でそれをしたい場合、あなたはそれを正規化する必要があります:

fig_pos = get(get(ah,'Parent'),'Position'); 
box_position = box_position ./ fig_pos([3 4 3 4]); 
+0

ありがとうございます。残念ながら、あなたのコードは軸ボックスの正確な位置を示していません。さらにそれは負の値につながる。 –

+0

3Dプロットを使用していますか?その場合、もっと複雑になる – KQS

+0

私はビュー(2)でサーフィンを使用します。したがって、それは2Dプロットです。 –

関連する問題