図を論文に適したサイズ・フォントに変換する関数

MATLABで作った図を, 論文に載せる図にする際, サイズやフォントを修正するのに使っている関数です.

2021/07/22:tiledlayoutを使った図に対応しました.

使い方

例えば, 以下のように一つ plotを描いた状況だとします.
example
いま, 論文に載せるために, で保存したいとします. この場合以下のようにします.

MATLAB

% Figure ハンドルの取得
fig = gcf;
% 引数は ( ハンドル, 幅[cm], 高さ[cm], fontsize, fontname ) の順. 
setFig(fig, 8, 6, 9, 'T')
% pngで600dpi,test.pngという名前で保存
print('test.png','-dpng', '-r600')
		

結果

result

wordに入れてみるとよくわかります. 入れた図の横幅を8cmに設定すると, Times New Romanの9ptで書いた, 図下の文章のフォントサイズと同じになっています.

result

その他

fontnameは, 以下の略称が使えます.

  1. 'T': Times New Roman
  2. 'A': Arial
ですが, その他のフォントはフォント名を入れてください.


MATLABのデフォルトでは, 軸や文字の色が, 若干灰色です. この関数は, これらをFFFFFF ( 黒 ) に変換します. デフォルトの灰色がいい場合は, 最後に引数trueを追加してください.
( 例:setFig(fig, 8, 6, 9, 'T', true) ) PPTには, デフォルトの灰色のほうが目に優しいそうです. ですので, 最後のtrueは, 一応「PPTモードが真」ということです.


多分, Legend, TickLabel, Title以外の文字サイズには働かないです.

コード

MATLABコード ( click ) MATLAB
function setFig(fig, x, y, fs, fn, ppt)

if ~exist('ppt', 'var'), ppt = false; end

if      fn == 'T'; fn = 'Times New Roman';
elseif  fn == 'A'; fn = 'Arial'          ; end

fig.Units         = 'centimeters';
fig.PaperUnits    = 'centimeters';
fig.PaperType     = 'a4';
fig.PaperPosition = [2, 2, x, y];
fig.Position      = [2, 2, x, y];

if isa(fig.Children, 'matlab.graphics.layout.TiledChartLayout') 
    fig = fig.Children;
end

nAxes = length(fig.Children);
for iAxes = 1 : nAxes
    if isa(fig.Children(iAxes), 'matlab.graphics.axis.Axes') 
        set(fig.Children(iAxes), 'FontName', fn)
        set(fig.Children(iAxes), 'FontSize', fs)
        if ~ppt
            set(fig.Children(iAxes), 'GridColor', 'k')
            set(fig.Children(iAxes), 'XColor', 'k'...
                                   , 'YColor', 'k'...
                                   , 'ZColor', 'k');
        end
        set(fig.Children(iAxes), 'TitleFontSizeMultiplier', 1)
        set(fig.Children(iAxes), 'TitleFontWeight', 'normal')
        fig.Children(iAxes).XLabel.FontSize = fs;
        fig.Children(iAxes).YLabel.FontSize = fs;
        fig.Children(iAxes).ZLabel.FontSize = fs;
        if ~isempty(fig.Children(iAxes).Legend)
            fig.Children(iAxes).Legend.FontSize = fs; end
        fig.Children(iAxes).Title.FontSize = fs;
    end
end
end
			

この記事のTOP    BACK    TOP