13
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MATLAB/SimulinkAdvent Calendar 2021

Day 14

Positionよ,話せば分かる……!(分からない)

Last updated at Posted at 2021-12-13

はじめに

MATLABで図を書くこと,ありますか?
僕はあります(そりゃそう).

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

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

figure関数のPositionオプション

教えて,MathWorksさん!

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

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

はあ:thinking:

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

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

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

はあ:thinking:

つまりこんな感じ?

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

図にするとこんな感じかな?
赤線のところがOuterPositionで設定できる領域で,青線のところがPositionで設定できる領域.
スクリーンショット 2021-12-14 3.57.01.png

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

座標軸のPosition

助けて,MathWorksさん!
...PositionOuterPositionはそれぞれこんな感じで説明されている.

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:
ということは,figurePositionaxesOuterPositionが(デフォルトでは)一致するということか.

図にするとこんな感じかな?
赤線のところがPositionで設定できる領域で,青線のところがOuterPositionで設定できる領域.
青線のところがfigurePositionと一致している(デフォルト値基準).スクリーンショット 2021-12-14 4.09.08.png

終わり…?

これだけ分かれば,余は満足じゃ.

...待って,これどういうこと?

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

地獄の三丁目: TiledLayout

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

さっきのaxesの図では,axesの親コンテナーはfigureだった.
TiledChartLayoutが親というのはこういう感じの図.
ドキュメントではもっといい感じの作例がある.
スクリーンショット 2021-12-14 4.29.57.png

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

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

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

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

終わり(にする)

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

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

13
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?