Встраивание сюжета matlab в pdf для печати: Размеры - PullRequest
1 голос
/ 06 июля 2011

В настоящее время я создаю свои фигуры в Matlab, чтобы вставить их латекс в PDF для последующей печати. Я сохраняю цифры и сохраняю их через скрипт export_fig ! Теперь мне интересно, какой путь лучше всего:

  • Какой размер окна рисунка matlab выбрать
  • Какой вариант -m взять для сценария? Это изменит разрешение и размер изображения ...

Я задаюсь вопросом об этих пунктах в отношении следующих двух пунктов:

  1. При выборе большего размера фигуры отображаются больше отметок, а маркеры в одной точке лучше видны
  2. При использовании маленькой фигуры и большой опции -m у меня остается только некоторые отметки
  3. Когда я генерирую изображение довольно большого размера (например, с разрешением 300 и 2000 * 2000 пикселей) и затем внедряю его в документ: это выглядит уродливо? Будет ли это встроено в хорошем режиме масштабирования, или это будет таким же уродливым, как если бы вы загружали изображение размером 1000 * 1000 пикселей на домашнюю страницу и вставляли его через теги widht и height в html -> браузер отображал его довольно уродливо, потому что браузер не не делать real изменения размера. Так что это выглядит нерезко и некрасиво.

Заранее спасибо!

1 Ответ

4 голосов
/ 06 июля 2011

Графики MATLAB внутренне описываются как векторная графика , а файлы PDF также описываются с использованием векторной графики.Рендеринг графика в растровый формат - плохая идея, потому что вам приходится выбирать разрешение и получать файлы большего размера.

Просто сохраните график в формате EPS , который может бытьнепосредственно встраивается в файл PDF с помощью latex.Я обычно сохраняю свои графики MATLAB для публикации, используя:

saveas(gcf, 'plot.eps', 'epsc');

и встраиваю их непосредственно в мой латексный файл, используя:

\includegraphics[width=0.7\linewidth]{plot.eps}

Тогда вам нужно только выбрать пропорцию линииизображение должно быть получено (в данном случае 70%).

Редактировать : IrfanView и другие (XnView) не очень хорошо отображают EPS.Вы можете открыть их в Adobe Illustrator, чтобы получить лучший предварительный просмотр того, как это выглядит.Я всегда вставляю свои графики таким образом, и они всегда выглядят одинаково в PDF и в MATLAB.

Один бонус, который вы также получаете с EPS, заключается в том, что вы можете указать размер шрифта, чтобы текст был читабельным дажепри изменении размера изображения в документе.

Что касается количества тактов, вы можете посмотреть свойства осей в документации MATLAB.В частности, свойства XTick и YTick очень полезны для ручного управления количеством отображаемых галочек независимо от разрешения окна.

Редактировать (снова) : Если вы визуализируйте изображение в растровом формате (например, PNG), предпочтительно выбрать точно такое же разрешение, которое используется в документе.Рендеринг большого изображения (с использованием большого размера окна) и его уменьшение в PDF приведет к плохим результатам, главным образом потому, что размер текста будет масштабироваться непосредственно в соответствии с размером изображения.Рендеринг маленького изображения, очевидно, приведет к очень плохому эффекту из-за растяжения.

Вот почему вы должны использовать векторный формат изображения.Однако стандартные настройки 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).

only вещь, которую это решение делает не address добавляет больше тиков, когда в латексном коде график становится больше, но это все равно невозможно.

...