2016-09-08 5 views
2

축 상자의 정확한 크기와 위치를 파악하는 방법 (축 레이블 및 숫자 제외)? 예를 들어, I는MATLAB : '축 동등'의 경우 축 상자의 정확한 크기와 위치?

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 사용)에 varyed하지만 get(gca,'position')의 값이 그대로 유지된다를 사용한다. 예를 들어

0.1300 0.1100 0.7750 0.8150 

내가 정렬이 필요 = ANS :

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

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

의 ANS =

0.1300 0.1100 0.7750 0.8150 

axis equal 후, 축 상자는 변경되지만 get(gca,'position') 동일한 좌표를 준다 색 상자를 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

3-D 플롯을 사용하고 있습니까? 이 경우 훨씬 더 복잡해집니다 – KQS

+0

뷰 (2)와 함께 서핑을 사용합니다. 따라서 그것은 2D 플롯입니다. –