我正在尝试使用我在这些问题中找到的答案:
将matlab绘图打印为pdf而不包含白边。
但是使用此代码:
function saveTightFigure( h, outfilename, orientation )
% SAVETIGHTFIGURE(H,OUTFILENAME) Saves figure H in file OUTFILENAME without
% the white space around it.
%
% by ``a grad student"
% http://tipstrickshowtos.blogspot.com/2010/08/how-to-get-rid-of-white-margin-in.html
% get the current axes
ax = get(h, 'CurrentAxes');
% make it tight
ti = get(ax,'TightInset');
set(ax,'Position',[ti(1) ti(2) 1-ti(3)-ti(1) 1-ti(4)-ti(2)]);
% adjust the papersize
set(ax,'units','centimeters');
pos = get(ax,'Position');
ti = get(ax,'TightInset');
set(h, 'PaperUnits','centimeters');
set(h, 'PaperSize', [pos(3)+ti(1)+ti(3) pos(4)+ti(2)+ti(4)]);
set(h, 'PaperPositionMode', 'manual');
set(h, 'PaperPosition',[0 0 pos(3)+ti(1)+ti(3) pos(4)+ti(2)+ti(4)]);
% save it
%saveas(h,outfilename);
if( orientation == 1)
orient portrait
else
orient landscape
end
print( '-dpdf', outfilename );
end
此输出结果:
正如您所看到的,“PaperSize”似乎设置不正确。有可能修复的想法吗?
注意
如果我更改landscape
和portrait
之间的方向,结果是相同的,只需以不同的方式切割图像。
但是,如果使用saveas(h,outfilename);
指令保存图像,则会生成正确的输出。
这是为什么?这两个保存指令有什么区别?
答案 0 :(得分:2)
总而言之,你提到的答案提供了很多方法,但大多数方法都没有为我工作。当你想要紧密插入时,他们中的大多数搞砸了你的纸张,唯一对我有用的是:
set(axes_handle,'LooseInset',get(axes_handle,'TightInset'));
我终于编写了一个函数,在这里我指定了纸上输出图形的确切高度和宽度,以及我想要的边距(或者只是将其设置为零)。请注意,您还需要传递轴手柄。也许这个功能也适合你。
function saveFigure( fig_handle, axes_handle, name , height , width , margin)
set(axes_handle,'LooseInset',get(axes_handle,'TightInset'));
set(fig_handle, 'Units','centimeters','PaperUnits','centimeters')
% the last two parameters of 'Position' define the figure size
set(fig_handle,'Position',[-margin -margin width height],...
'PaperPosition',[0 0 width+margin height+margin],...
'PaperSize',[width+margin height+margin],...
'PaperPositionMode','auto',...
'InvertHardcopy', 'on',...
'Renderer','painters'... %recommended if there are no alphamaps
);
saveas(fig_handle,name,'pdf')
end
修改:如果您使用painters
作为渲染器saveas
,则print
会产生类似的结果。对于jpegs print
是可取的,因为您可以指定分辨率。