Подтвердить что ты не робот

Как сохранить график в PDF файле без большого запаса

Если я распечатаю график в формате EPS, содержимое EPS файла полностью занято графиком. Но если я напечатаю сюжет в формате PDF, тогда есть большие поля выше и ниже графика в файле PDF. Как сохранить сюжет в файле PDF без большого запаса вокруг графика?

Мое предположение заключается в том, как автоматически выбрать нужный "бумажный" размер в PDF файле для печати в соответствии с размером графика.

Это вопрос, который я задал в tex.stackexchange.com, где у меня есть ответы, которые в основном пытались решить проблему за пределами MATLAB, и я до сих пор не совсем понимаю единственный ответ, который пытался решить из MATLAB. Поэтому я хотел бы посмотреть, есть ли здесь больше мнений.

4b9b3361

Ответ 1

Что вы подразумеваете под "правильным размером"? MATLAB цифры похожи на векторную графику, поэтому вы можете в принципе выбрать нужный размер на вашем сюжете.

Вы можете установить размер бумаги и положение фигуры с помощью функции set.

Пример:

plot(epx(1:5));
set(gcf, 'PaperPosition', [0 0 5 5]); %Position plot at left hand corner with width 5 and height 5.
set(gcf, 'PaperSize', [5 5]); %Set the paper to have width 5 and height 5.
saveas(gcf, 'test', 'pdf') %Save figure

Enter image description here

Приведенный выше код удалит большую часть границ, но не все. Это связано с тем, что левый угол ([0 0] в векторе положения) не является "истинным" левым углом. Чтобы удалить больше границ, вы можете отрегулировать векторы PaperPosition и PaperSize.

Пример:

plot(exp(1:5))
set(gcf, 'PaperPosition', [-0.5 -0.25 6 5.5]); %Position the plot further to the left and down. Extend the plot to fill entire paper.
set(gcf, 'PaperSize', [5 5]); %Keep the same paper size
saveas(gcf, 'test', 'pdf')

Enter image description here

Ответ 2

Это работает для отображения целей:

set(gca(), 'LooseInset', get(gca(), 'TightInset'));

Должен работать и для печати. ​​

Ответ 3

Размер осей в MATLAB иногда может быть немного сложным. Вы правы, чтобы подозревать свойства бумаги в качестве одной из проблем. Другой - автоматические поля, которые рассчитывает MATLAB. К счастью, есть настраиваемые свойства осей, которые позволяют обойти эти поля. Вы можете reset, чтобы поля были достаточно большими для меток осей, используя комбинацию свойств Position и TightInset, которые объясняются здесь. Попробуйте следующее:

>> h = figure;
>> axes;
>> set(h, 'InvertHardcopy', 'off');
>> saveas(h, 'WithMargins.pdf');

и вы получите PDF файл, который выглядит так: MATLAB plot with auto-margins но теперь сделайте следующее:

>> tightInset = get(gca, 'TightInset');
>> position(1) = tightInset(1);
>> position(2) = tightInset(2);
>> position(3) = 1 - tightInset(1) - tightInset(3);
>> position(4) = 1 - tightInset(2) - tightInset(4);
>> set(gca, 'Position', position);
>> saveas(h, 'WithoutMargins.pdf');

и вы получите: MATLAB plot with auto-margins removed

Ответ 5

Функция export_fig в обмене файлами MATLAB обрезает пробелы вокруг выходного файла PDF/EPS по умолчанию при экспорте фигуры.

Ответ 6

Мне кажется, что все подходы (решения для обмена файлами, которые не рассматриваются) здесь не имеют существенного шага или, наконец, приводят к нему через некоторые размытые обходные пути.

Размер фигуры должен быть равен размеру бумаги, а белые поля отсутствуют.

A = hgload('myFigure.fig');

% set desired output size
set(A, 'Units','centimeters')
height = 15;
width = 19;

% the last two parameters of 'Position' define the figure size
set(A, 'Position',[25 5 width height],...
       'PaperSize',[width height],...
       'PaperPositionMode','auto',...
       'InvertHardcopy', 'off',...
       'Renderer','painters'...     %recommended if there are no alphamaps
   );

saveas(A,'printout','pdf')

Дает вам выход в формате pdf, поскольку ваша фигура появится точно в нужном размере. Если вы хотите, чтобы это было еще плотнее, вы можете объединить это решение с ответом b3.

Ответ 7

Сохранить в EPS, а затем конвертировать в PDF:

saveas(gcf, 'nombre.eps', 'eps2c')
system('epstopdf nombre.eps') %Needs TeX Live (maybe it works with MiKTeX).

Вам понадобится программное обеспечение, которое преобразует EPS в PDF.

Ответ 8

system ('/usr/bin/pdfcrop filename.pdf');