Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

Axes の縦横比を操作する

Axes の縦横比のプロパティ

axis コマンドは、さまざまな Axes オブジェクトのプロパティを設定することによって機能します。このプロパティを直接設定して、必要な効果を正確に実現することができます。

プロパティ

説明

DataAspectRatio

個々の軸データ値の相対的スケーリングを設定します。DataAspectRatio[1 1 1] に設定し、実世界のオブジェクトを正しい割合で表示します。DataAspectRatio に値を指定すると、表示域に合わせる動作がオーバーライドされます。

daspect で設定します。

DataAspectRatioMode

auto の場合、MATLAB® は使用可能な空間に最大の解像度を提供する軸スケールを選択します。

PlotBoxAspectRatio

Axes のプロット ボックスの割合を設定します (ボックスを見るには、boxon に設定してください)。PlotBoxAspectRatio に値を指定すると、表示域に合わせる動作がオーバーライドされます。

pbaspect で設定します。

PlotBoxAspectRatioMode

auto の場合、MATLAB は DataAspectRatio が軸範囲を明示的に設定しない限り、PlotBoxAspectRatio[1 1 1] に設定します。

Position

4 要素ベクトル[left offset, bottom offset, width, height] で座標軸の位置とサイズを定義します。

XLim, YLim, ZLim

各 Axes の最小または最大範囲を設定します。

XLimMode , YLimMode , ZLimMode

auto の場合、MATLAB は軸範囲を選択します。

モード プロパティが auto に設定されると、MATLAB はそれらのプロパティすべての値を自動的に設定し、Figure の形状に合わせて座標軸を表示域に合わせます。すべてのプロパティの自動操作は、プロパティに値を指定するか、モード プロパティを manual に設定することによってオーバーライドすることができます。

特定のプロパティに対して選択する値は、主にどのタイプのデータを表示するかにより異なります。MATLAB で可視化するデータの多くは、次のいずれかになります。

  • ライン、メッシュ プロットまたは他の特殊プロットとして表示される数値データ

  • 実世界のオブジェクトの表現 (たとえば、自動車や地球の地形図)

はじめのケースでは、各軸方向で解像度の良い軸範囲を選択し、使用可能な空間を満たすことが一般に望まれます。一方、実世界のオブジェクトは視点の角度に関係なく、正確な割合で表現しなければなりません。

MATLAB の既定のプロパティ値は次のように設計されています。

  • すべてのデータを含むように軸範囲を選択します (XLimModeYLimModeZLimModeauto に設定した場合)。

  • 各軸のスケールを別々に設定することによって、使用可能な空間における最大の解像度を提供します(DataAspectRatioModePlotBoxAspectRatioModeauto に設定した場合)。

  • CameraViewAngle の調整によって位置を決める四角形に適合する座標軸を描画し、必要に応じて座標軸を表示域に合わせます。

既定の縦横比の選択

座標軸の Position プロパティは、Figure 内の座標軸の位置と大きさを指定します。ベクトル Position の 3 番目と 4 番目の要素 (幅と高さ) は、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 プログラムを作成する場合、これは良い方法ではありません。より優れた方法は、軸の縦横比を指定し、表示域に合わせる動作を自動的にオーバーライドすることです。

特定の縦横比を指定する場合、以下の座標軸プロパティに値を指定することによって、表示域に合わせる動作をオーバーライドすることができます。

  • DataAspectRatio または DataAspectRatioMode

  • PlotBoxAspectRatio または PlotBoxAspectRatioMode

  • CameraViewAngle または CameraViewAngleMode

最初の 2 つのプロパティは、縦横比に直接影響します。モード プロパティのいずれかを手動に設定すると、表示域に合わせる動作は無効になりますが、現在のプロパティ値はすべて保持されます。この場合、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 のサイズと形状を変更しても、Axes の縦横比は変化しません。

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 プロパティを設定すると、表示域に合わせる動作が無効になり、ビューを変更しても座標軸のサイズが再調整されることはありません。

縦横比プロパティ

必要な結果を得るためにプロパティ同士がどのように相互に関係しているかを理解することが重要です。DataAspectRatioPlotBoxAspectRatioxyz 軸の範囲 (XLimYLimZLim プロパティ) は、すべて座標軸の形状に制約を課しています。

データの縦横比

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.

関数daspectDataAspectRatio プロパティの実際の値を返します。

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 の前の値を使用していることがわかります。関数pbaspectPlotBoxAspectRatio の値を返します。

pbaspect
ans = 1×3

     4     8     1

指定された DataAspectRatio を MATLAB が使用して、グラフに適合するようにプロット ボックスの再スケーリングを行ったことがわかります。

PlotBoxAspectRatio プロパティは座標軸のプロット ボックスの形状を制御します。MATLAB は既定でこのプロパティを [1 1 1] に設定し、グラフがプロット ボックスを埋めるように、または制約値に達するまで DataAspectRatio プロパティを調整します。

DataAspectRatio の値を設定することにより、それが変更されないようにした場合、MATLAB は代わりに PlotBoxAspectRatio を変更します。

DataAspectRatioPlotBoxAspectRatio の両方を指定した場合、MATLAB は既に定義した 2 つの制約に従って軸の範囲を強制的に変更します。

メッシュ プロットの例で両方のプロパティを設定すると、MATLAB は座標軸に課された 2 つの制約を満たすように軸の範囲を変更します。

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.