MATLAB:正确调整图形大小

Posted

技术标签:

【中文标题】MATLAB:正确调整图形大小【英文标题】:MATLAB: Resizing a figure properly 【发布时间】:2011-05-08 09:38:17 【问题描述】:

我有一个图,我想调整其大小,然后打印为 PDF。 使用类似的东西

set(hFig, 'PaperUnits', 'centimeters')
set(hFig, 'PaperSize', [x_B x_H]);

只要我不大幅调整图形大小即可。如果我降低高度,那么在某些时候 xlabel 会移出图形。我进行了很多搜索,但只找到了手动调整底层轴对象大小的解决方案

scalefactor = 0.96;
movefactor = 0.82;
hAx = get(gcf,'CurrentAxes');
g = get(hAx,'Position');
% 1=left, 2=bottom, 3=width, 4=height
g(2) = g(2) + (1-movefactor)/2*g(4);
g(4) = scalefactor*g(4);
set(hAx,'Position',g);

我不喜欢这种方法,因为我必须手动调整这两个因素。

在打印之前,我将所有文本对象的“解释器”设置为“乳胶”(如果有问题的话)。 打印是使用实现的

print(hFig, '-dpdf', '-loose', 'test.pdf');

我希望通过使用“-loose”来放松边界框。非常感谢任何帮助!

编辑: 似乎解释器(none,tex,latex)确实在其中发挥了作用。我从这里的这篇文章 (http://***.com/questions/5150802/how-to-save-plot-into-pdf-without-large-margin-around) 中得到启发,并提出了这个解决方案:

tightInset = get(gca, 'TightInset');
position(1) = tightInset(1);

position(3) = 1 - tightInset(1) - tightInset(3);
if strcmpi(x_Interpreter,'latex')
    position(2) = tightInset(2)+ 1*tightInset(4);
    position(4) = 1 - tightInset(2) - 2*tightInset(4);
else
    position(2) = tightInset(2)+ 0*tightInset(4);
    position(4) = 1 - tightInset(2) - 1*tightInset(4);
end
set(gca, 'Position', position);

【问题讨论】:

您能否发布一个最小的非工作示例,以便我们重现您的错误? 您是否尝试过先调整图形大小然后设置轴等? 值得注意的是,“打印”命令的行为可能取决于您的显示分辨率设置(至少在 Windows 下的某些 MATLAB 版本上)。这在尝试打印大图像时尤其明显。当我准备打印/导出图形时,我倾向于明确指定尺寸以避免头痛。 【参考方案1】:

这可能无法完全解决您的问题(它可能只是帮助清理您的代码),但我发现文件交换中的 fig 代码很有帮助:它可以让您轻松设置图形的确切大小而不会出现白色边框空间。

【讨论】:

以上是关于MATLAB:正确调整图形大小的主要内容,如果未能解决你的问题,请参考以下文章

在matlab中绘制一个有很多子图的大图

Matlab,如何调整图形上的轴值(科学记数法 - 精度不够)[重复]

设置图形大小

matlab中如何调整legend的位置?

如何使用 MATLAB 创建包含文本和图形的报告

Matlab中的小eps图形大小