Figure全般に関するメモ

現在のFigureの個数を取得

  • 取得方法
    fh=findobj(0,'Type','Figure');
    nfig = size(fh,1);
    1行目で生成されているFigure全てのハンドルがfhになり,その長さを取得することで数がわかる.
  • ハンドルの再設定
    figureしたのにハンドルを付け忘れた時は,上記で取得したfhを使って,
    figA = fh(1);
    とすれば,Figure1固有のFigureハンドルになる.

Figureウィンドウの表示位置変更

厳密に位置を指定したいときは,Positionプロパティをいじる.

p = get(gcf,'Position');
% 左端をleft, 下端をbottomに,幅と高さは変更なし
set(gcf,'Position',[left bottom p(3) p(4)])

FigureのPositionには,[left bottom width height]が入る.
上記はウィンドウのサイズはそのままに位置だけを変える.

他のウィンドウを重ならなければ問題ない程度であれば.moveguiを使うのが楽.

movegui(fig1,'northeast')
movegui(fig2,'southeast')
movegui('west')

figureハンドルを指定しない場合はgcfが対象.

Figureウィンドウのサイズ変更

  • 表示スクリーンに応じた最大サイズの取得
    subplotを使うとき,縦長や横長のグラフを作成するときなどに.
    使用しているディスプレイによって表示可能なサイズが変わるので,まずは最大サイズを取得する.
    scrsz = get(groot,'ScreenSize');
    maxW = scrsz(3);
    maxH = scrsz(4);
    grootはrootのグラフィックスオブジェクト.何かを格納する変数ではないので注意.
  • ウィンドウのサイズ変更
    あとはこの表示可能な最大サイズを上回らないように,適当に係数でもつけて幅と高さを変える.
    デフォルトの大きさに対する幅の倍率をnw,高さの倍率をnhとすれば,
    figure;
    p = get(gcf,'Position');
    dw = p(3)-min(nw*p(3),maxW);
    dh = p(4)-min(nh*p(4),maxH);
    set(gcf,'Position',[p(1)+dw/2  p(2)+dh  min(nw*p(3),maxW)  min(nh*p(4),maxH)])
    で設定できる.
    Positionプロパティのwidthとheightだけを変えるとウィンドウが見えなくなるので,サイズの変更に応じて表示基準点も変える方がベター.
    eps形式でfigureを保存するときは,PaperPositionも設定しないとおかしくなる?みたい.

Figureの一部を削除

forやwhileでループを使って何回も描画し,毎回軸,色,ラベル,タイトル等を設定するのは時間が勿体無い.
ラベル等はそのままに,pcolorやsurfで描いたものだけ消したい場合は,deleteに消したいハンドルオブジェクトを入力する.
下記は,2回目以降pcolor以外はそのままにpcolorを書き直す例.

for k = 1:n
  if exist('h','var'); delete(h); end; % hが変数として存在していれば実行
  h = pcolor(X,Y,C(:,:,k))
  ... 
  ...
end

FigureオブジェクトからAxesの取得

R2014らへん以降のバージョンから,FigureやAxes,Colorbarなどはオブジェクトになった.

ax = fig.CurrentAxes;

のようにメソッドを使用することで,

figure(fig)
ax = gca;

と同様にカレントAxesを取得できる. figure(fig)をしないのでウィンドウが邪魔にならず,functionの中で使うのに便利.


Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2018-04-18 (Wed) 07:06:21 (278d)