打印与图窗口大小相同的图形

时间:2012-04-30 23:29:30

标签: matlab printing figure

我正在尝试以PDF格式保存图形,这样我就不会在其周围获得无关的空白区域,即图形应与图形窗口的大小相同。

我很确定这样做的方法是

figureNames = {'a', 'b', 'c'};
for i = 1:3
    set(figure(i), 'paperpositionmode', 'auto');
    print(figure(i), '-dpdf', figureNames{i})
end

但它不起作用。我得到的空白一如既往。有人可以告诉我什么是错的吗?

3 个答案:

答案 0 :(得分:1)

我也遇到过这个问题。解决方法是在-depsc(颜色)或-deps打印,如果您只需要灰度数字。封装的postscript文件几乎没有白边。您可以稍后将.eps文件转换为pdf,如果您在LaTeX中工作,则可以原样使用它。

答案 1 :(得分:1)

您可以尝试“一体化”解决方案,将数字转换为pdf文件。我用的是mlf2pdf (http://www.mathworks.com/matlabcentral/fileexchange/28545)它看起来效果很好。此外,由于所有东西的乳胶排版,生产数据的质量更好

答案 2 :(得分:1)

似乎将PaperPositionMode设置为auto将消除EPS文件的无关空白区域,但不会放弃PDF格式。

为了摆脱PDF的空白区域,我写了一个小脚本来调整纸张的大小。因为它太短了,所以我把它包括在下面以防其他人需要它。

它的灵感来自this document以及此StackOverflow question

我的解决方案只能操纵纸张尺寸,而不是图形轴,因为操纵轴会遇到子图的问题。这也意味着一些空白区域将保留。在MATLAB的词汇表中,数字以OuterPosition而不是TightInset为界。

function [filename] =  printpdf(fig, name)
% printpdf Prints image in PDF format without tons of white space

% The width and height of the figure are found
% The paper is set to be the same width and height as the figure
% The figure's bottom left corner is lined up with
% the paper's bottom left corner

% Set figure and paper to use the same unit
set(fig, 'Units', 'centimeters')
set(fig, 'PaperUnits','centimeters');

% Position of figure is of form [left bottom width height]
% We only care about width and height
pos = get(fig,'Position');

% Set paper size to be same as figure size
set(fig, 'PaperSize', [pos(3) pos(4)]);

% Set figure to start at bottom left of paper
% This ensures that figure and paper will match up in size
set(fig, 'PaperPositionMode', 'manual');
set(fig, 'PaperPosition', [0 0 pos(3) pos(4)]);

% Print as pdf
print(fig, '-dpdf', name)

% Return full file name
filename = [name, '.pdf'];
end