Positionよ，話せば分かる……！(分からない)

# はじめに

MATLABで図を書くこと，ありますか？
僕はあります(そりゃそう)．

MATLABできれいに図を書くにあたっていろんなパラメータを調整しているという方も多いんじゃないでしょうか．
僕もそうですが，中にはマジで触りたくないオプションがあります．
それは，`Position`オプション．

いやほんとマジで，`Position`オプションって何をどういじったらどう変わるの？？？

# `figure`関数の`Position`オプション

## 教えて，MathWorksさん！

>描画可能領域の位置とサイズ。[left bottom width height] の形式のベクトルとして指定します。この領域には、Figure の境界線、タイトル バー、メニュー バーおよびツール バーは含まれません。
次の表で、Position ベクトルの各要素について説明します。

| 要素 | 説明 |
|:--------------|:------------------------------------------------------------------------------------------|
| left  | プライマリ ディスプレイの左端から、ウィンドウ内側の左端までの距離。この値は、複数のモニターがあるシステムでは負の値になる場合があります。<br>Figure がドッキングしている場合、この値は、MATLAB デスクトップ内の Figure パネルを基準にした値になります。  |
| bottom  | プライマリ ディスプレイの下端から、ウィンドウ内側の下端までの距離。この値は、複数のモニターがあるシステムでは負の値になる場合があります。<br>Figure がドッキングしている場合、この値は、MATLAB デスクトップ内の Figure パネルを基準にした値になります。  |
| width  | figure の内側の左右の端の間の距離。  |
| height  | ウィンドウ内側の上下の端の距離。  |

はあ:thinking:

`OuterPosition`の方はどうなっているんだろう？

>外側の境界の位置とサイズ。[left bottom width height] の形式のベクトルとして指定します。このプロパティは、Figure の外側の境界によって囲まれる領域 (境界線、タイトル バー、メニュー バーおよびツール バーを含む) を定義します。
次の表で、ベクトルの各要素について説明します。

| 要素 | 説明 |
|:--------------|:------------------------------------------------------------------------------------------|
| left  | プライマリ ディスプレイの左端から figure ウィンドウの外側の左端までの距離。この値は、複数のモニターがあるシステムでは負の値になる場合があります。<br>Figure がドッキングしている場合、この値は、MATLAB デスクトップ内の Figure パネルを基準にした値になります。  |
| bottom  | プライマリ ディスプレイの下端から figure ウィンドウの外側の下端までの距離。この値は、複数のモニターがあるシステムでは負の値になる場合があります。<br>Figure がドッキングしている場合、この値は、MATLAB デスクトップ内の Figure パネルを基準にした値になります。  |
| width  | figure の外側の左右の端の間の距離。  |
| height  | figure外側の上下の端の距離。  |

はあ:thinking:

## つまりこんな感じ？

「はあ:thinking:」って言ったけど，思ったよりわかりやすくてびっくりしてる．
~~俺の今までは何だったんだ…~~

図にするとこんな感じかな？
赤線のところが`OuterPosition`で設定できる領域で，青線のところが`Position`で設定できる領域．
![スクリーンショット 2021-12-14 3.57.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629180/f3a5e1ba-3554-a1c6-72b4-f4fb0dfef50c.png)

なんとなく分かった:thinking:

# 座標軸の`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 要素は、外側の位置境界の寸法です。

はあ:thinking:
ということは，`figure`の`Position`と`axes`の`OuterPosition`が(デフォルトでは)一致するということか．

図にするとこんな感じかな？
赤線のところが`Position`で設定できる領域で，青線のところが`OuterPosition`で設定できる領域．
青線のところが`figure`の`Position`と一致している(デフォルト値基準)．![スクリーンショット 2021-12-14 4.09.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629180/ad54c697-2eff-4971-b80c-fe1c0bc44620.png)

# 終わり…？

これだけ分かれば，余は満足じゃ．

...待って，これどういうこと？

>親コンテナーが TiledChartLayout の場合、このプロパティを設定しても効果はありません。

# 地獄の三丁目: TiledLayout

僕が`Position`嫌いになってしまった原因がTiledChartLayoutな気がする．

さっきの`axes`の図では，`axes`の親コンテナーは`figure`だった．
`TiledChartLayout`が親というのはこういう感じの図．
[ドキュメント](https://jp.mathworks.com/help/matlab/ref/tiledlayout.html)ではもっといい感じの作例がある．
![スクリーンショット 2021-12-14 4.29.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629180/91be75cb-301a-25c6-9777-85fc01add427.png)

1つの図の中に色々描きたいときはすごく便利そう．
では「親コンテナーが TiledChartLayout の場合、このプロパティを設定しても効果はありません。」というのはなんでだろう．
本来なら`Position`で指定できる領域は図の赤線みたいになる．
![スクリーンショット 2021-12-14 4.29.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/629180/88158671-3e53-e406-9b39-9511e91d64d0.png)

~~線がずれてて非常に見栄えが悪い~~
いやこれは重要で，おそらくMathWorksさんは各Tileの位置を個別にいじってしまうと見栄えが悪くなってしまうと考えて，TileChartLayoutの子の`Position`，`OuterPosition`はいじれないようにしたんだろう．

なお，TiledChartLayout自体にも`Position`，`OuterPosition`のオプションがある．
これらは`axes`と同じような感じになっている．
つまり，`OuterPosition`が`figure`の`Position`に対応し(デフォルト値)，`Position`で表される領域内に各Tileの(おそらく)ラベルを除いた領域が描画される．

よかった地獄の0.5丁目くらいだった．

# 終わり(にする)

とりあえず自分がよく触る図の`Position`周りの話をまとめてみた．

なんか，`colorbar`方面から地獄九丁目くらいのニオイがするので今日のところはここまで……．