如何将绘图保存为PDF文件而没有大的空白

如果我以EPS格式打印一个图表,那么EPS文件的内容就完全被这个图表所占据。 但是,如果我以PDF格式打印一个图表,那么PDF文件中的图表上方和下方都有很大的利润空间。 如何在PDF文件中保存一个没有大的空白的情节?

我的猜测是如何根据绘图大小自动selectPDF文件中适当的“纸张”大小进行打印。

这是我在tex.stackexchange.com上提出的一个问题,我得到的答复大多是试图解决MATLAB以外的问题,而我仍然不太理解在MATLAB中试图求解的唯一答案。 所以我想看看这里是否有更多的意见。

你是什​​么意思“适当的大小”? MATLAB的数字就像vector图,所以你可以基本上select你想要的大小。

您可以使用function设置纸张的大小和graphics的位置。

例:

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 

在这里输入图像说明

上面的代码将删除大部分的边界,但不是全部。 这是因为左边angular(位置vector中的[0 0] )不是“真正的”左边angular。 要删除更多的边框,可以调整PaperPositionPaperSizevector。

例:

 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') 

在这里输入图像说明

这适用于显示目的:

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

也应该为印刷工作。

MATLAB中的轴大小有时可能有点棘手。 您怀疑纸张尺寸属性是问题的一部分,这是正确的。 另一个是MATLAB计算的自动边界。 幸运的是,有可设置的轴属性,可以绕过这些边界。 您可以使用这里解释的PositionTightInset属性的组合来重置边距,使其足够大到轴标签。 尝试这个:

 >> h =图;
 >>轴;
 >> set(h,'InvertHardcopy','off');
 >> saveas(h,'WithMargins.pdf');

你会得到一个PDF格式,如下所示: MATLAB绘图与自动边距 但现在这样做:

 >> 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绘图被删除

如何摆脱MATLAB的saveas或打印输出的白色边缘的脚本做你想要的。

MATLAB文件交换中的函数export_fig将默认输出一个数字时,在输出的PDF / EPS文件周围裁剪空白。

在我看来,这里所有的方法(文件交换解决scheme都没有考虑到)都缺乏必要的步骤,或者最终通过一些模糊的解决方法来实现。

数字大小需要与纸张大小相等,白色边距不见了。

 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输出,正好是你想要的大小。 如果你想要更紧密的话,你可以把这个解决scheme与b3的答案结合起来。

保存到EPS然后转换为PDF:

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

您将需要一些将EPS转换为PDF的软件。

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