Axes の縦横比を操作する
Axes の縦横比のプロパティ
axis
コマンドは、さまざまな Axes オブジェクトのプロパティを設定することによって機能します。このプロパティを直接設定して、必要な効果を正確に実現することができます。
プロパティ | 説明 |
---|---|
DataAspectRatio | 個々の軸データ値の相対的スケーリングを設定します。
|
DataAspectRatioMode |
|
PlotBoxAspectRatio | Axes のプロット ボックスの割合を設定します (ボックスを見るには、
|
PlotBoxAspectRatioMode |
|
Position | 4 要素ベクトル[left offset, bottom offset, width, height] で座標軸の位置とサイズを定義します。 |
XLim, YLim, ZLim | 各 Axes の最小または最大範囲を設定します。 |
XLimMode , YLimMode , ZLimMode |
|
モード プロパティが auto
に設定されると、MATLAB はそれらのプロパティすべての値を自動的に設定し、Figure の形状に合わせて座標軸を表示域に合わせます。すべてのプロパティの自動操作は、プロパティに値を指定するか、モード プロパティを manual に設定することによってオーバーライドすることができます。
特定のプロパティに対して選択する値は、主にどのタイプのデータを表示するかにより異なります。MATLAB で可視化するデータの多くは、次のいずれかになります。
ライン、メッシュ プロットまたは他の特殊プロットとして表示される数値データ
実世界のオブジェクトの表現 (たとえば、自動車や地球の地形図)
はじめのケースでは、各軸方向で解像度の良い軸範囲を選択し、使用可能な空間を満たすことが一般に望まれます。一方、実世界のオブジェクトは視点の角度に関係なく、正確な割合で表現しなければなりません。
MATLAB の既定のプロパティ値は次のように設計されています。
すべてのデータを含むように軸範囲を選択します (
XLimMode
、YLimMode
、ZLimMode
をauto
に設定した場合)。各軸のスケールを別々に設定することによって、使用可能な空間における最大の解像度を提供します(
DataAspectRatioMode
とPlotBoxAspectRatioMode
をauto
に設定した場合)。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 のサイズと形状を変更すると、座標軸のサイズと形状が変化します。座標軸では、新しい目盛の位置が選択されることもあります。
f = gcf; f.Position(3) = f.Position(3) * 0.67;
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 のサイズと形状を変更しても、Axes の縦横比は変化しません。
f = gcf; f.Position(3) = f.Position(3) * 0.67;
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')
関数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])
DataAspectRatio
プロパティの値を設定すると、DataAspectRatioMode
を manual
に設定し、表示域に合わせる動作をオーバーライドして、指定した縦横比を実現します。
プロット ボックスの縦横比
前節のグラフの PlotBoxAspectRatio
の値を見ると、DataAspectRatio
の前の値を使用していることがわかります。関数pbaspect
は PlotBoxAspectRatio
の値を返します。
pbaspect
ans = 1×3
4 8 1
指定された DataAspectRatio
を MATLAB が使用して、グラフに適合するようにプロット ボックスの再スケーリングを行ったことがわかります。
PlotBoxAspectRatio
プロパティは座標軸のプロット ボックスの形状を制御します。MATLAB は既定でこのプロパティを [1 1 1]
に設定し、グラフがプロット ボックスを埋めるように、または制約値に達するまで DataAspectRatio
プロパティを調整します。
DataAspectRatio
の値を設定することにより、それが変更されないようにした場合、MATLAB は代わりに PlotBoxAspectRatio
を変更します。
DataAspectRatio
と PlotBoxAspectRatio
の両方を指定した場合、MATLAB は既に定義した 2 つの制約に従って軸の範囲を強制的に変更します。
メッシュ プロットの例で両方のプロパティを設定すると、MATLAB は座標軸に課された 2 つの制約を満たすように軸の範囲を変更します。
daspect([1 1 1]) pbaspect([1 1 1])
軸範囲の調整
座標軸には 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])
プロット ボックスの縦横比をクエリすると、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)
ただし、この座標軸はデータで定義した固定オブジェクトの実際の形状を歪めています。正しい割合で表示するには、次のように DataAspectRatio
を設定します。このプロパティを設定すると、x 軸、y 軸、z 軸方向の単位が同一になり、位置を決める四角形に座標軸を合わせる動作を行わないため、オブジェクトの実際の形状がわかります。
set(gca,'DataAspectRatio',[1 1 1])