MATLABプロットは、内部的にベクターグラフィックとして記述され、PDFファイルもベクターグラフィックを使用して記述されます。プロットをラスター形式にレンダリングすることはお勧めできません。解像度を選択する必要があり、ファイルが大きくなるためです。
プロットをEPS形式で保存するだけで、を使用してPDFファイルに直接埋め込むことができますlatex。私は通常、以下を使用して公開用にMATLABプロットを保存します。
saveas(gcf, 'plot.eps', 'epsc');
次を使用して、それらをラテックスファイルに直接埋め込みます。
\includegraphics[width=0.7\linewidth]{plot.eps}
次に、画像がとる線の割合(この場合は70%)を選択するだけで済みます。
編集:IrfanViewなど(XnView)はEPSをうまく表示しません。それらをAdobeIllustratorで開くと、どのように見えるかをよりよくプレビューできます。私は常にプロットをこのように挿入し、PDFでもMATLABとまったく同じように見えます。
EPSで得られる利点の1つは、実際にフォントサイズを指定できるため、ドキュメント内の画像のサイズを変更した場合でもテキストが読みやすくなることです。
ティック数については、MATLABドキュメントでaxesプロパティを確認できます。特に、XTickandYTickプロパティは、ウィンドウの解像度に関係なく、表示されるティック数を手動で制御するのに非常に便利です。
編集(再度) :画像をラスター形式(PNGなど)にレンダリングする場合は、ドキュメントで使用されているものとまったく同じ解像度を選択することをお勧めします。大きな画像を(大きなウィンドウサイズを使用して)レンダリングし、PDFで小さくすると、主にテキストのサイズが画像のサイズに直接比例するため、悪い結果が得られます。小さな画像をレンダリングすると、ストレッチが発生するため、明らかに非常に悪い効果が生じます。
そのため、ベクター画像形式を使用する必要があります。ただし、FigureのデフォルトのMATLAB設定では、ラスターイメージと同じ問題がいくつか発生します。テキストサイズがフォントサイズとして指定されておらず、目盛りの数がウィンドウサイズによって異なります。
最終レンダリングで最適なプロットを作成するには、次の手順に従います。
- フィギュアのフォントサイズを適切な設定(例:11pt)に設定します
- プロットをレンダリングする
- 良い効果を得るために目盛りの数を決定し、目盛りを手動で設定します
- EPSをカラー化するために画像をレンダリングします
MATLABコードでは、これは次のようになります。
function [] = nice_figure ( render )
%
% invisible figure, good for batch renders.
f = figure('Visible', 'Off');
% make plots look nice in output PDF.
set(f, ...
'DefaultAxesFontSize', 11, ...
'DefaultAxesLineWidth', 0.7, ...
'DefaultLineLineWidth', 0.8, ...
'DefaultPatchLineWidth', 0.7);
% actual plot to render.
a = axes('Parent', f);
% show whatever it is we need to show.
render(a);
% save file.
saveas(f, 'plot.eps', 'epsc');
% collect garbarge.
close(f);
end
次に、以下を使用していくつかの派手なプロットを描くことができます。
function [] = some_line_plot ( a )
%
% render data.
x = -3 : 0.001 : +3;
y = expm1(x) - x - x.^2;
plot(a, x, y, 'g:');
title('f(x)=e^x-1-x-x^2');
xlabel('x');
ylabel('f(x)');
% force use of 'n' ticks.
n = 5;
xlimit = get(a, 'XLim');
ylimit = get(a, 'YLim');
xticks = linspace(xlimit(1), xlimit(2), n);
yticks = linspace(ylimit(1), ylimit(2), n);
set(a, 'XTick', xticks);
set(a, 'YTick', yticks);
end
そして、以下を使用して最終出力をレンダリングします。
nice_figure(@some_line_plot);
このようなコードを使用すると、ウィンドウサイズをまったく気にする必要がありません。私はあなたがそのサイズで遊ぶためのウィンドウさえ示していないことに注意してください。このコードを使用すると、常に美しい出力と小さなEPSおよびPDFファイルサイズ(PNGを使用する場合よりもはるかに小さい)が得られます。
このソリューションが対処していない唯一のことは、ラテックスコードでプロットが大きくなったときにティックを追加することですが、それはとにかく行うことはできません。