在MATLAB中创建一个简单图形并将其保存为PDF时,生成的PDF文件将具有一个豪华的边界框。
plot(1,1,'x')
print(gcf, '-dpdf', 'test.pdf');
(从输出的比例来看,他们似乎总是在A页面上输入。)
有没有一种简单的方法可以在PDF周围获得一个紧密的边界框?
您可以按以下格式设置边界框
figure(1)
hold on;
plot(1,1,'x')
ps = get(gcf, 'Position');
ratio = ps(4) / ps(3)
paperWidth = 10;
paperHeight = paperWidth*ratio;
set(gcf, 'paperunits', 'centimeters');
set(gcf, 'papersize', [paperWidth paperHeight]);
set(gcf, 'PaperPosition', [0 0 paperWidth paperHeight]);
print(gcf, '-dpdf', 'test2.pdf');
对于较小的边界,您可以调整paperposition
属性,例如
set(gcf, 'PaperPosition', [-0.5 -0.5 paperWidth+0.5 paperHeight+0.5]);
~编辑~
正如Space47的回答所指出的那样,我更正了比率的计算,因为它是错误的。(感谢@Space47)。
这是一个老问题,但我会回答,因为谷歌在Mathworks自己的帮助页面之前为我找到了这个问题(很抱歉,没有足够的声誉来发布对以前的评论)。无论如何
ratio = (ps(4)-ps(2)) / (ps(3)-ps(1))
应该是
ratio = ps(4)/ps(3);
作为第一值gcf。位置是屏幕上[x,y]的位置,与大小无关。
此外,Matlab(R)给出了一个答案,特别是如果您不想/不需要调整图形大小:https://se.mathworks.com/help/matlab/creating_plots/save-figure-with-minimal-white-space.html
fig = gcf;
fig.PaperPositionMode = 'auto'
fig_pos = fig.PaperPosition;
fig.PaperSize = [fig_pos(3) fig_pos(4)];