Matlab 如何将绘图保存到PDF文件中而周围没有大边距

Matlab 如何将绘图保存到PDF文件中而周围没有大边距,matlab,Matlab,如果以格式打印打印打印,EPS文件的内容将完全被打印占用。但是如果我打印的是PDF格式的绘图,那么在PDF文件中绘图的上下都有很大的空白。如何将绘图保存在PDF文件中,而绘图周围没有很大的空白 我的猜测是如何根据打印大小自动选择PDF文件中要打印的适当“纸张”大小 这是我问过的一个问题,在那里我得到的答复主要是试图解决外部问题,但我仍然不太理解试图从MATLAB内部解决的唯一答复。所以我想看看这里是否有更多的意见。在MATLAB中调整轴的大小有时会有点棘手。您正确地怀疑纸张尺寸特性是问题的一部分

如果以格式打印打印打印,EPS文件的内容将完全被打印占用。但是如果我打印的是PDF格式的绘图,那么在PDF文件中绘图的上下都有很大的空白。如何将绘图保存在PDF文件中,而绘图周围没有很大的空白

我的猜测是如何根据打印大小自动选择PDF文件中要打印的适当“纸张”大小


这是我问过的一个问题,在那里我得到的答复主要是试图解决外部问题,但我仍然不太理解试图从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')