はじめに
MATLABで図を書くこと,ありますか?
僕はあります(そりゃそう).
MATLABできれいに図を書くにあたっていろんなパラメータを調整しているという方も多いんじゃないでしょうか.
僕もそうですが,中にはマジで触りたくないオプションがあります.
それは,Positionオプション.
いやほんとマジで,Positionオプションって何をどういじったらどう変わるの???
figure関数のPositionオプション
教えて,MathWorksさん!
描画可能領域の位置とサイズ。[left bottom width height] の形式のベクトルとして指定します。この領域には、Figure の境界線、タイトル バー、メニュー バーおよびツール バーは含まれません。
次の表で、Position ベクトルの各要素について説明します。
| 要素 | 説明 |
|---|---|
| left | プライマリ ディスプレイの左端から、ウィンドウ内側の左端までの距離。この値は、複数のモニターがあるシステムでは負の値になる場合があります。 Figure がドッキングしている場合、この値は、MATLAB デスクトップ内の Figure パネルを基準にした値になります。 |
| bottom | プライマリ ディスプレイの下端から、ウィンドウ内側の下端までの距離。この値は、複数のモニターがあるシステムでは負の値になる場合があります。 Figure がドッキングしている場合、この値は、MATLAB デスクトップ内の Figure パネルを基準にした値になります。 |
| width | figure の内側の左右の端の間の距離。 |
| height | ウィンドウ内側の上下の端の距離。 |
はあ![]()
OuterPositionの方はどうなっているんだろう?
外側の境界の位置とサイズ。[left bottom width height] の形式のベクトルとして指定します。このプロパティは、Figure の外側の境界によって囲まれる領域 (境界線、タイトル バー、メニュー バーおよびツール バーを含む) を定義します。
次の表で、ベクトルの各要素について説明します。
| 要素 | 説明 |
|---|---|
| left | プライマリ ディスプレイの左端から figure ウィンドウの外側の左端までの距離。この値は、複数のモニターがあるシステムでは負の値になる場合があります。 Figure がドッキングしている場合、この値は、MATLAB デスクトップ内の Figure パネルを基準にした値になります。 |
| bottom | プライマリ ディスプレイの下端から figure ウィンドウの外側の下端までの距離。この値は、複数のモニターがあるシステムでは負の値になる場合があります。 Figure がドッキングしている場合、この値は、MATLAB デスクトップ内の Figure パネルを基準にした値になります。 |
| width | figure の外側の左右の端の間の距離。 |
| height | figure外側の上下の端の距離。 |
はあ![]()
つまりこんな感じ?
「はあ
」って言ったけど,思ったよりわかりやすくてびっくりしてる.
俺の今までは何だったんだ…
図にするとこんな感じかな?
赤線のところがOuterPositionで設定できる領域で,青線のところがPositionで設定できる領域.

なんとなく分かった![]()
座標軸のPosition
助けて,MathWorksさん!
...PositionとOuterPositionはそれぞれこんな感じで説明されている.
Position
ラベルの余白を除いたサイズと位置。[left bottom width height] の形式の 4 要素ベクトルとして指定します。既定では、MATLAB はコンテナーを基準に正規化された単位で値を測定します。単位を変更するには、Units プロパティを設定します。
left 要素と bottom 要素は、コンテナー (通常は Figure、パネルまたはタブ) の左下隅から位置境界の左下隅までの距離を定義します。
width 要素と height 要素は、位置境界の寸法です。3 次元表示の座標軸では、Position プロパティは座標軸を囲む最小の四角形です。
OuterPosition
ラベルと余白を含むサイズと位置。[left bottom width height] の形式の 4 要素ベクトルとして指定します。既定では、MATLAB はコンテナーを基準に正規化された単位で値を測定します。単位を変更するには、Units プロパティを設定します。既定値 [0 0 1 1] は、コンテナーの内側全体になります。
left 要素と bottom 要素は、コンテナー (通常は Figure、パネルまたはタブ) の左下隅から位置境界の左下隅までの距離を定義します。
width 要素と height 要素は、外側の位置境界の寸法です。
はあ![]()
ということは,figureのPositionとaxesのOuterPositionが(デフォルトでは)一致するということか.
図にするとこんな感じかな?
赤線のところがPositionで設定できる領域で,青線のところがOuterPositionで設定できる領域.
青線のところがfigureのPositionと一致している(デフォルト値基準).
終わり…?
これだけ分かれば,余は満足じゃ.
...待って,これどういうこと?
親コンテナーが TiledChartLayout の場合、このプロパティを設定しても効果はありません。
地獄の三丁目: TiledLayout
僕がPosition嫌いになってしまった原因がTiledChartLayoutな気がする.
さっきのaxesの図では,axesの親コンテナーはfigureだった.
TiledChartLayoutが親というのはこういう感じの図.
ドキュメントではもっといい感じの作例がある.

1つの図の中に色々描きたいときはすごく便利そう.
では「親コンテナーが TiledChartLayout の場合、このプロパティを設定しても効果はありません。」というのはなんでだろう.
本来ならPositionで指定できる領域は図の赤線みたいになる.

線がずれてて非常に見栄えが悪い
いやこれは重要で,おそらくMathWorksさんは各Tileの位置を個別にいじってしまうと見栄えが悪くなってしまうと考えて,TileChartLayoutの子のPosition,OuterPositionはいじれないようにしたんだろう.
なお,TiledChartLayout自体にもPosition,OuterPositionのオプションがある.
これらはaxesと同じような感じになっている.
つまり,OuterPositionがfigureのPositionに対応し(デフォルト値),Positionで表される領域内に各Tileの(おそらく)ラベルを除いた領域が描画される.
よかった地獄の0.5丁目くらいだった.
終わり(にする)
とりあえず自分がよく触る図のPosition周りの話をまとめてみた.
なんか,colorbar方面から地獄九丁目くらいのニオイがするので今日のところはここまで…….