Графики 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 для рисунков создают некоторые из тех же проблем, что и растровые изображения: размер шрифта не указывается в качестве размера шрифта, а число тактов зависит от размера окна.
Для создания оптимальных графиков вДля окончательного рендеринга выполните следующие шаги:
- Установите размер шрифта фигуры на приемлемое значение (например, 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).
only вещь, которую это решение делает не address добавляет больше тиков, когда в латексном коде график становится больше, но это все равно невозможно.