如果我以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]位置向量)不是"真正的"左侧角.要删除更多边框,可以调整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')
Run Code Online (Sandbox Code Playgroud)

Roy*_*oyi 10
这适用于显示目的:
set(gca(), 'LooseInset', get(gca(), 'TightInset'));
Run Code Online (Sandbox Code Playgroud)
也应该用于打印.
在MATLAB中调整轴大小有时会有点棘手.怀疑纸张尺寸属性是问题的一部分是正确的.另一个是MATLAB计算的自动边距.幸运的是,有可设置的轴属性允许您绕过这些边距.您可以使用此处说明的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的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)
...如果你直接做saveas(或打印),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)
| 归档时间: |
|
| 查看次数: |
100094 次 |
| 最近记录: |