Как сохранить график в PDF файле без большого запаса
Если я распечатаю график в формате EPS, содержимое EPS файла полностью занято графиком. Но если я напечатаю сюжет в формате PDF, тогда есть большие поля выше и ниже графика в файле PDF. Как сохранить сюжет в файле PDF без большого запаса вокруг графика?
Мое предположение заключается в том, как автоматически выбрать нужный "бумажный" размер в PDF файле для печати в соответствии с размером графика.
Это вопрос, который я задал в tex.stackexchange.com, где у меня есть ответы, которые в основном пытались решить проблему за пределами MATLAB, и я до сих пор не совсем понимаю единственный ответ, который пытался решить из MATLAB. Поэтому я хотел бы посмотреть, есть ли здесь больше мнений.
Ответы
Ответ 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 файл, который выглядит так:
но теперь сделайте следующее:
>> 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]()
Ответ 4
script в Как избавиться от белого поля в резервных копиях MATLAB или выводах печати делает то, что вы хотите.
Ответ 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');