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

Tim*_*Tim 41 matlab

如果我以EPS格式打印图表,EPS文件的内容将完全占用图表.但是如果我以PDF格式打印图表,那么PDF文件中的图表上方和下方都有很大的边距.如何在没有图块周围大边缘的PDF文件中保存图表?

我的猜测是如何根据绘图大小自动选择要打印到的PDF文件中的正确"纸张"大小.

这是我在tex.stackexchange.com上提出的一个问题,在那里我得到的回复主要是试图解决MATLAB之外的问题,而我仍然不太了解试图在MATLAB中解决的唯一回复.所以我想看看这里是否有更多的意见.

Gha*_*aul 20

你说"合适的尺寸"是什么意思?MATLAB图形就像矢量图形,所以你基本上可以在你的图上选择你想要的尺寸.

您可以使用功能设置来设置纸张的大小和图形的位置.

例:

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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

上面的代码将删除大部分边框,但不是全部.这是因为左侧角([0 0]位置向量)不是"真正的"左侧角.要删除更多边框,可以调整PaperPositionPaperSize矢量.

例:

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')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Roy*_*oyi 10

这适用于显示目的:

set(gca(), 'LooseInset', get(gca(), 'TightInset'));
Run Code Online (Sandbox Code Playgroud)

也应该用于打印.


b3.*_*b3. 9

在MATLAB中调整轴大小有时会有点棘手.怀疑纸张尺寸属性是问题的一部分是正确的.另一个是MATLAB计算的自动边距.幸运的是,有可设置的轴属性允许您绕过这些边距.您可以使用此处说明的PositionTightInset属性的组合将边距重置为足够大的轴标签.试试这个:

>> h = figure;
>> axes;
>> 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图


emr*_*rea 6

如何摆脱MATLAB的saveas或打印输出的白色边距的脚本可以满足您的需求.

使你的数字边界紧张:

ti = get(gca,'TightInset')
set(gca,'Position',[ti(1) ti(2) 1-ti(3)-ti(1) 1-ti(4)-ti(2)]);
Run Code Online (Sandbox Code Playgroud)

...如果你直接做save​​as(或打印),MATLAB仍然会添加烦人的空白区域.为了摆脱它们,我们需要调整"纸张尺寸":

set(gca,'units','centimeters')
pos = get(gca,'Position');
ti = get(gca,'TightInset');

set(gcf, 'PaperUnits','centimeters');
set(gcf, 'PaperSize', [pos(3)+ti(1)+ti(3) pos(4)+ti(2)+ti(4)]);
set(gcf, 'PaperPositionMode', 'manual');
set(gcf, 'PaperPosition',[0 0 pos(3)+ti(1)+ti(3) pos(4)+ti(2)+ti(4)]);
Run Code Online (Sandbox Code Playgroud)