スポンサーリンク
最近twitterを始めました。全然使い方がわかりません。
(学生のときに始めておけばよかった。。。)
工学系のネタで書きたいのですが、本日は記事を書く時間がないのでMATLABのTIPSネタを紹介したいと思います。みなさんMATLABでfigureを出力すると同じところにfigureが出力するので、図を比較しにくくて困りません?
例えば、下記コードで9つのfigureを出力すると、下図のようになります。
N=3;
M=3;
for n=1:N*M
figure
end

図が同じ位置に出力してしまうので、とりあえず、右クリックしながらカーソル動かして図を移動させてませんか?
(MATLAB2020では微妙にずれて出力してくれますが….)
スポンサーリンク
上記の問題を解決してくれるのが下記functionです。
function [fig1]=figure_alignment(fn,n,N,M)
NUMBER=zeros(N,M);
NUMBER2=[];
for nn=1:N
NUMBER(nn,:)=0:M-1;
NUMBER2=[NUMBER2 1:M];
end
set(0,'Units','pixels')
scnsize = get(0,'ScreenSize');
fig1 = figure(fn);
% % [left bottom width height]
position = get(fig1,'Position');
outerpos = get(fig1,'OuterPosition');
borders = outerpos - position;
edge = -borders(1)/2;
% pos1 = [scnsize(3)/M*NUMBER(floor((n-1)/N)+1,rem(n,M+1)) - edge,...
% scnsize(4) * (1/M)*( floor((n-1)/N)+1),...
% scnsize(3)/M - edge,...
% scnsize(4)/N];
pos1 = [scnsize(3)/M*NUMBER(floor((n-1)/M)+1,NUMBER2(n)) - edge,...
scnsize(4) - (scnsize(4) * (1/N)*( (floor((n-1)/M)+1))),...
scnsize(3)/M - edge,...
scnsize(4)/N];
set(fig1,'OuterPosition',pos1)
% % floor(n/N) 行
% % rem(n/M) 列
end
このfunctionファイルを使用すれば、下記コードでfigureを綺麗に並べることができます。
close all
N=3;
M=3;
for n=1:N*M
[fig1]=figure_alignment(n,n,N,M);
end

今回はこのへんでGood luck
スポンサーリンク


コメント