17
16

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 5 years have passed since last update.

Matlab の図を余白のない pdf で保存する方法

Posted at

このメモでは Matlab の図を無駄な余白のない pdf ファイルで保存する方法についてまとめます。

問題

普通に figure 画面で「ファイル」->「名前を付けて保存」から pdf 形式で保存をすると、次のような無駄に余白のある pdf ファイルができます。

image.png

png 形式で保存するとこんなに大きな余白はできないのですが、LaTeX でベクトル形式の図を貼りたかった私は pdf 形式でも無駄に大きな余白がない図を保存したいと思い、設定を調べてみました。

対処法

pdf への出力では印刷用の用紙サイズの設定が利用されているようなので、それを一旦変更してから保存を行うスクリプトを作成しました。

{SaveFig.m}
function SaveFig(fig, filename)
%
% SaveFig(fig, filename)
%
% 引数figに指定されたfigureをfilenameの名前のpng,pdfファイルで保存する。
% filenameは拡張子をつけない。
%
% 例:SaveFig(figure(1),'example')

% 終わってない描画処理があったら終わらせる
drawnow;

% 紙のサイズを変える。
temp.figunit = fig.Units;
fig.Units = 'centimeters';
pos = fig.Position;
fig.PaperPositionMode = 'Auto';
temp.figpaperunit = fig.PaperUnits;
fig.PaperUnits = 'centimeters';
temp.figsize = fig.PaperSize;
fig.PaperSize = [pos(3), pos(4)];

% 保存する。
print(fig,filename,'-dpdf','-r300','-bestfit')
print(fig,filename,'-dpng','-r300')

% 設定を元に戻す。
fig.PaperSize = temp.figsize;
fig.Units = temp.figunit;
fig.PaperUnits = temp.figpaperunit;

end

なお、この関数は png 形式の図も一緒に作っています。
(png の方が Microsoft Office では使いやすい。)

この関数を使って、例えば

{.m}
h = figure;
fplot(@sin);
xlabel('x');
ylabel('y');
title('y=sin(x)');
SaveFig(h,'test');

とすると、次のような test.pdf ファイルが生成されます。

image.png

無駄な余白のない pdf 形式の図が出力できました。

あとがき

今回は2年くらい調整しながら使い続けているスクリプトを紹介しました。
ちょっとしたスクリプトですので、私に責任を問わないという条件のもとであれば自由にコピペして構いません。ただ、役に立ったことをコメントやいいねで告げていただけると喜びます。

17
16
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
17
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?