Main Content

좌표축 종횡비 조작하기

좌표축 종횡비 속성

axis 명령은 다양한 axes 객체 속성을 설정하는 방식으로 작동합니다. 이러한 속성을 직접 설정하여 원하는 효과를 정확하게 실현할 수 있습니다.

속성

설명

DataAspectRatio

개별 축 데이터 값의 상대 스케일링을 설정합니다. 정확한 비율로 실제 객체를 표시하려면 DataAspectRatio[1 1 1]로 설정하십시오. DataAspectRatio의 값을 지정하면 늘여서 채우기 동작이 무시됩니다.

daspect로 설정

DataAspectRatioMode

auto에서는 MATLAB®이 사용 가능한 공간에서 최고의 해상도를 제공하는 축 스케일을 선택합니다.

PlotBoxAspectRatio

좌표축 플롯 상자의 비율을 설정합니다(상자를 보려면 boxon으로 설정함). PlotBoxAspectRatio의 값을 지정하면 늘여서 채우기 동작이 무시됩니다.

pbaspect로 설정

PlotBoxAspectRatioMode

auto에서는 사용자가 DataAspectRatio 및/또는 축 제한을 명시적으로 설정하지 않을 경우 MATLAB이 PlotBoxAspectRatio[1 1 1]로 설정합니다.

Position

[왼쪽 오프셋, 아래쪽 오프셋, 너비, 높이]의 요소를 4개 가진 벡터로 좌표축의 위치와 크기를 정의합니다.

XLim, YLim, ZLim

각 좌표축의 최소 제한과 최대 제한을 설정합니다.

XLimMode , YLimMode , ZLimMode

auto에서는 MATLAB이 축 제한을 선택합니다.

모드 속성을 auto로 설정하면 MATLAB이 이 모든 속성의 값을 자동으로 결정한 후 Figure 형태에 맞춰 좌표축을 늘입니다. 속성의 값을 지정하거나 모드 속성을 수동으로 설정하여 속성에서 자동으로 설정된 값을 재정의할 수 있습니다.

특정 속성에 대해 선택하는 값은 주로 사용자가 어떤 유형의 데이터를 표시하고자 하는지에 따라 달라집니다. MATLAB으로 시각화되는 데이터 중 대부분은 다음 둘 중 하나입니다.

  • 선, 메시 플롯 또는 기타 특화된 플롯으로 표시되는 숫자형 데이터

  • 실제 객체의 표현(예: 자동차, 지구 지형의 한 단면 등)

첫 번째 경우에는 일반적으로 각각의 축 방향으로 우수한 해상도를 제공하는 축 제한을 선택하고 사용 가능한 공간을 채우는 것이 바람직합니다. 반면에, 실제 객체는 시각에 상관없이 정확한 비율로 표현할 필요가 있습니다.

MATLAB 디폴트 속성값은 다음과 같이 동작하도록 설계되었습니다.

  • 데이터의 범위를 포괄하는 축 제한을 선택합니다(XLimMode, YLimMode, ZLimModeauto로 설정된 경우).

  • 각 축의 스케일을 독립적으로 설정하여 사용 가능한 공간에서 최고의 해상도를 제공합니다(DataAspectRatioModePlotBoxAspectRatioModeauto로 설정된 경우).

  • CameraViewAngle을 조정하여 위치 사각형에 맞는 좌표축을 그린 후 필요한 경우 좌표축을 늘여서 채웁니다.

디폴트 종횡비 선택

좌표축의 Position 속성은 Figure 내 좌표축의 위치와 차원을 지정합니다. Position 벡터의 세 번째 요소와 네 번째 요소(너비와 높이)는 MATLAB이 좌표축을 그리는 사각형을 정의합니다. MATLAB은 좌표축을 이 사각형에 맞춥니다.

좌표축의 Units 속성의 디폴트 값은 부모 Figure 차원으로 정규화됩니다. 즉, Figure 창의 형태에 따라 위치 사각형의 형태가 결정된다는 의미입니다. Figure 창의 크기를 변경하면 MATLAB이 그에 맞춰 위치 사각형의 형태를 변경합니다.

sphere
set(gcf,'Color',[0.90 0.90 0.90])
set(gca,'BoxStyle','full','Box','on')

Figure contains an axes object. The axes object contains an object of type surface.

Figure의 크기와 형태를 변경하면 좌표축의 크기와 형태가 변경됩니다. 좌표축이 새로운 축 눈금 위치를 선택하게 될 수도 있습니다.

f = gcf;
f.Position(3) = f.Position(3) * 0.67;

Figure contains an axes object. The axes object contains an object of type surface.

Figure 창에 맞도록 좌표축의 형태를 변경하면 그래프의 종횡비가 바뀔 수 있습니다. MATLAB은 위치 사각형을 채우도록 좌표축을 맞추는데 이 과정에서 형태를 왜곡할 수 있습니다. 이는 일반적으로 숫자형 데이터의 그래프에는 적합하지만, 객체를 사실적으로 표시하는 데는 적합하지 않습니다.

Figure 크기 조정에 무관하게 좌표축 비율 유지하기

특정한 형태를 유지하기 위해, 사용자는 Figure 창 크기에 독립적인 절대 단위(예: 인치)로 좌표축의 크기를 지정할 수 있습니다. 하지만 이는 Figure 창의 크기를 임의로 하는 MATLAB 프로그램을 작성하는 경우라면 좋은 접근 방식이 아닙니다. 좌표축의 종횡비를 지정하고 자동적으로 적용되는 늘여서 채우기를 무시하는 것이 더 나은 방법입니다.

특정한 종횡비를 원하는 경우에는 다음과 같은 axes 속성의 값을 지정하여 늘이기를 무시할 수 있습니다.

  • DataAspectRatio 또는 DataAspectRatioMode

  • PlotBoxAspectRatio 또는 PlotBoxAspectRatioMode

  • CameraViewAngle 또는 CameraViewAngleMode

처음 두 속성 집합은 종횡비에 직접적으로 영향을 미칩니다. 두 모드 속성 중 어느 것이든 manual로 설정하면 현재의 모든 속성값은 그대로 유지하면서 단순히 늘여서 채우기만 비활성화됩니다. 이 경우, MATLAB은 위치 사각형의 한 크기가 위치 사각형을 제한할 때까지 좌표축을 확대합니다. 예를 들어, DataAspectRatio[1 1 1]로 설정해 보겠습니다. 또한, Figure와 좌표축 간의 관계를 표시하기 위해 Figure의 색을 설정합니다.

sphere
daspect([1 1 1])
set(gca,'BoxStyle','full','Box','on')
set(gcf,'Color',[0.90 0.90 0.90])

Figure contains an axes object. The axes object contains an object of type surface.

Figure의 크기와 형태를 변경하더라도 좌표축의 종횡비가 바뀌지 않습니다.

f = gcf;
f.Position(3) = f.Position(3) * 0.67;

Figure contains an axes object. The axes object contains an object of type surface.

CameraViewAngle 속성을 설정하면 늘여서 채우기가 비활성화될 뿐만 아니라 보기를 변경하는 경우 이 좌표축의 크기를 다시 조정하지 못하도록 방지됩니다.

종횡비 속성

원하는 결과를 얻기 위해서는 속성들이 서로 어떻게 상호 작용하는지 이해하는 것이 중요합니다. DataAspectRatio, PlotBoxAspectRatio 그리고 x축 제한, y축 제한, z축 제한(각각 XLim, YLim, ZLim 속성)은 모두 좌표축의 형태에 제약을 적용합니다.

데이터 종횡비

DataAspectRatio 속성은 축 스케일의 비율을 제어합니다. 예를 들어, MATLAB은 수학 표현식의 곡면 플롯을 표시하기 위해 함수의 값을 강조하는 데이터 종횡비를 선택합니다.

[X,Y] = meshgrid((-2:.15:2),(-4:.3:4));
Z = X.*exp(-X.^2 - Y.^2);
surf(X,Y,Z)
set(gca,'BoxStyle','full','Box','on')

Figure contains an axes object. The axes object contains an object of type surface.

daspect 함수는 DataAspectRatio 속성의 실제 값을 반환합니다.

daspect
ans = 1×3

     4     8     1

즉, x축상의 4개의 길이 단위는 y축상의 8개의 길이 단위 및 z축상의 1개의 길이 단위와 동일한 데이터 값을 포괄합니다. 이 좌표축은 기본적으로 종횡비가 [1 1 1]인 플롯 상자를 채웁니다.

각각의 축을 따라 상대 크기가 상호 간에 같아지도록 곡면 플롯을 표시하려는 경우에는 DataAspectRatio[1 1 1]로 설정하면 됩니다.

daspect([1 1 1])

Figure contains an axes object. The axes object contains an object of type surface.

또한, DataAspectRatio 속성의 값을 설정하면 DataAspectRatioModemanual로 설정되고 지정한 종횡비가 실현되도록 늘여서 채우기를 무시합니다.

플롯 상자 종횡비

이전 섹션에 있는 그래프에 대한 PlotBoxAspectRatio의 값을 보면 DataAspectRatio의 이전 값을 취했음을 알 수 있습니다. pbaspect 함수는 PlotBoxAspectRatio의 값을 반환합니다.

pbaspect
ans = 1×3

     4     8     1

MATLAB이 그래프를 수용하기 위해 지정된 DataAspectRatio를 사용하여 플롯 상자를 다시 스케일링했습니다.

PlotBoxAspectRatio 속성은 좌표축 플롯 상자의 형태를 제어합니다. 기본적으로, MATLAB은 이 속성을 [1 1 1]로 설정하고 그래프가 플롯 상자를 채우거나 제약 조건에 도달할 때까지 DataAspectRatio 속성을 조정합니다.

DataAspectRatio의 값을 설정하여 변경되지 않도록 하면 MATLAB은 PlotBoxAspectRatio를 대신 변경합니다.

사용자가 DataAspectRatioPlotBoxAspectRatio를 둘 다 지정한 경우, MATLAB은 이미 정의한 두 가지 제약 조건을 준수하기 위해 축 제한을 변경하는 수밖에 없습니다.

계속해서 이 메시 예제에서 다음 두 속성을 모두 설정하면 MATLAB이 좌표축에 적용된 두 가지 제약 조건을 충족하기 위해 축 제한을 변경합니다.

daspect([1 1 1])
pbaspect([1 1 1])

Figure contains an axes object. The axes object contains an object of type surface.

축 제한 조정하기

좌표축에는 x축 제한, y축 제한 및 z축 제한을 설정할 수 있는 속성도 있습니다. 하지만 PlotBoxAspectRatio 속성 및 DataAspectRatio 속성과 함께 축 제한을 지정하면 좌표축을 과도하게 제약하게 됩니다. 예를 들어, 다음 명령은 PlotBoxAspectRatio 값과 충돌하는 축 제한을 지정합니다.

set(gca,'DataAspectRatio',[1 1 1],...
        'PlotBoxAspectRatio',[1 1 1],...
        'XLim',[-4 4],...
        'YLim',[-4 4],...
        'ZLim',[-1 1])

Figure contains an axes object. The axes object contains an object of type surface.

플롯 상자 종횡비를 쿼리하면 PlotBoxAspectRatio 값이 축 제한에 맞게 변경되었음을 확인할 수 있습니다.

pbaspect
ans = 1×3

     4     4     1

실제 객체 표시하기

사실적으로 보이도록 객체를 표시하고 싶으면 MATLAB 디폴트 값을 변경해야 합니다. 예를 들어, 다음 데이터는 쐐기 형태의 patch 객체를 정의합니다.

vert = [0 0 0; 0 1 0; 1 1 0; 1 0 0; 0 0 1; 0 1 1; 1 1 4; 1 0 4];
fac = [1 2 3 4; 2 6 7 3; 4 3 7 8; 1 5 8 4; 1 2 6 5; 5 6 7 8];
patch('Vertices',vert,'Faces',fac,...
   'FaceColor',[0.7 0.7 0.7],'EdgeColor','k')
view(3)

Figure contains an axes object. The axes object contains an object of type patch.

하지만 이 좌표축은 데이터로 정의된 입체 객체의 실제 형태를 왜곡합니다. 이 객체를 올바른 비율로 표시하려면 DataAspectRatio를 설정하십시오. 이 속성을 설정하면 x, y, z 방향으로 단위가 같아지고 위치 사각형을 채울 목적으로 좌표축이 늘어나지 않으므로 객체의 실제 형태가 표시됩니다.

set(gca,'DataAspectRatio',[1 1 1])

Figure contains an axes object. The axes object contains an object of type patch.