Matlab 如何将绘图保存到PDF文件中而周围没有大边距
如果以格式打印打印打印,EPS文件的内容将完全被打印占用。但是如果我打印的是PDF格式的绘图,那么在PDF文件中绘图的上下都有很大的空白。如何将绘图保存在PDF文件中,而绘图周围没有很大的空白 我的猜测是如何根据打印大小自动选择PDF文件中要打印的适当“纸张”大小Matlab 如何将绘图保存到PDF文件中而周围没有大边距,matlab,Matlab,如果以格式打印打印打印,EPS文件的内容将完全被打印占用。但是如果我打印的是PDF格式的绘图,那么在PDF文件中绘图的上下都有很大的空白。如何将绘图保存在PDF文件中,而绘图周围没有很大的空白 我的猜测是如何根据打印大小自动选择PDF文件中要打印的适当“纸张”大小 这是我问过的一个问题,在那里我得到的答复主要是试图解决外部问题,但我仍然不太理解试图从MATLAB内部解决的唯一答复。所以我想看看这里是否有更多的意见。在MATLAB中调整轴的大小有时会有点棘手。您正确地怀疑纸张尺寸特性是问题的一部分
这是我问过的一个问题,在那里我得到的答复主要是试图解决外部问题,但我仍然不太理解试图从MATLAB内部解决的唯一答复。所以我想看看这里是否有更多的意见。在MATLAB中调整轴的大小有时会有点棘手。您正确地怀疑纸张尺寸特性是问题的一部分。另一个是MATLAB计算的自动边距。幸运的是,有一些可设置的轴属性允许您绕过这些边界。您可以使用前面介绍的
位置
和紧插页
属性组合,将页边距重置为刚好足以放置轴标签的大小。试试这个:
>> h = figure;
>> axes;
>> set(h, 'InvertHardcopy', 'off');
>> saveas(h, 'WithMargins.pdf');
>>h=数字;
>>轴线;
>>设置(h,“硬拷贝”、“关闭”);
>>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');
>>紧插图=get(gca,“紧插图”);
>>位置(1)=插图(1);
>>位置(2)=插图(2);
>>位置(3)=1-紧插图(1)-紧插图(3);
>>位置(4)=1-紧插图(2)-紧插图(4);
>>设置(gca,‘位置’,位置);
>>saveas(h,'WithoutMargins.pdf');
您将得到:
你说的“合适的尺寸”是什么意思?图形类似于矢量图形,因此基本上可以在绘图上选择所需的大小
您可以使用该功能设置纸张的大小和图形的位置
例如:
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
上面的代码将删除大部分边框,但不是全部。这是因为位置向量中的左角([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')
此功能用于显示:
set(gca(), 'LooseInset', get(gca(), 'TightInset'));
也可以用于打印。中的脚本可以满足您的需要
让你的身材更紧致:
。。。如果直接执行saveas(或print),MATLAB仍然会添加恼人的空白。为了去除它们,我们需要调整“纸张大小”:
MATLAB文件交换上的函数在导出图形时,默认情况下会裁剪输出PDF/EPS文件周围的空白。保存到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');
数字大小需要与纸张大小相等,并且白色边距消失。
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输出。如果您想使其更紧凑,您可以将此解决方案与回答b3相结合。您如何为窗口本身而不仅仅是纸张设置较小的边距?谢谢。您如何为窗口本身而不仅仅是纸张设置较小的边距“是的,这张纸吗?谢谢。@Drazick-上面是这样做的。它在保存到PDF之前先在窗口中创建小的页边距,这样你就可以在屏幕上看到小的页边距。请查看答案中的链接,了解更多关于紧插图属性和轴的一般定位的信息。如果我在图中有多个轴怎么办?@craq-你可以。”在一个轴上使用相同的方法。在定位轴时,我发现在像素单元中工作更容易,但是它也会像上面例子中的标准化单元一样工作。这个问题在另一个线程中被回答:请考虑添加一个解释来与代码/命令一起运行。图形在可视化窗口中的顺序,但不会更改PDF图形。
system ('/usr/bin/pdfcrop filename.pdf');
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')