1

私は現在、後で印刷するためにラテックスを介してそれらをpdfに埋め込むために、MATLABで図を作成しています。図を保存し、スクリプトexport_figを使用して保存します。今、私は行くための最良の方法はどれだろうかと思います:

  • 選択するMATLABフィギュアウィンドウのサイズ
  • -mスクリプトに使用するオプションはどれですか?画像の解像度とサイズが変更されます...

次の2つの点に関して、これらの点について疑問に思っています。

  1. フィギュアサイズを大きく選択すると、より多くの目盛りが表示され、シングルポイントマーカーが見やすくなります
  2. 小さな数字を使用し、大きな-mオプションを使用する場合、まだいくつかの目盛りしかありません
  3. 非常に大きな画像(たとえば、解像度300で2000 * 2000px)を生成し、それをドキュメントに埋め込むと、見た目が醜くなりますか?これは素晴らしいスケーリングモードに埋め込まれますか、それとも1000 * 1000pxの画像をホームページにアップロードしてhtmlのwidhtタグとheightタグを介して埋め込むのと同じ醜さですか?->ブラウザは非常に醜い表示をしますサイズ変更は行いませんreal。だから、それは不鮮明で醜いように見えます。

前もって感謝します!

4

1 に答える 1

4

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設定では、ラスターイメージと同じ問題がいくつか発生します。テキストサイズがフォントサイズとして指定されておらず、目盛りの数がウィンドウサイズによって異なります。

最終レンダリングで最適なプロットを作成するには、次の手順に従います。

  1. フィギュアのフォントサイズを適切な設定(例:11pt)に設定します
  2. プロットをレンダリングする
  3. 良い効果を得るために目盛りの数を決定し、目盛りを手動で設定します
  4. 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を使用する場合よりもはるかに小さい)が得られます。

このソリューションが対処していない唯一のことは、ラテックスコードでプロットが大きくなったときにティックを追加することですが、それはとにかく行うことはできません。

于 2011-07-05T20:29:04.403 に答える