Matlab打印图形到EPS格式时经常会裁剪掉坐标轴标签

3

我想让Matlab 7.10.0.499 (R2010a)使用print命令将图形输出为eps格式,但无论我将图形设置为哪种纸张大小,它总是会裁剪掉坐标轴标签,除非我将其设置为A3大小。

这是一个PNG图片,用于说明问题(尽管我知道PNG文件是由不同的渲染管道生成的):

enter image description here

生成此图形的代码如下:

    figure, 
set(gcf, 'renderer', 'painters');

loglog(p_m_tt, p_fa_tt, 'k-', 'LineWidth', 2); hold on;
loglog(p_m_oo, p_fa_oo, 'k--', 'LineWidth', 2); hold on;
loglog(p_m_ot, p_fa_ot, 'k-.', 'LineWidth', 3); hold on;
fontSize = 9;

l = legend('Cam1-Cam1', 'Cam2-Cam2', 'Cam2-Cam1', ...
    'Location', 'NorthEast');

fontSize = 20;
xlabel('$P_{fa}$', 'fontsize', fontSize);
ylabel('$P_{m}$', 'fontsize', fontSize);

set(gca, 'XMinorTick', 'off', 'YMinorTick', 'off', 'YGrid', 'on', 'XGrid', 'on');
set(gcf, 'PaperPositionMode', 'auto');
set(gca, 'XTick', [0.00001 0.0001 0.001 0.01 0.1 1]);
set(gca, 'MinorGridLineStyle', 'none');

set(gca, 'FontSize', fontSize);
set(gcf, 'defaultAxesFontName', 'Times New Roman');

axis square;

X = 13;
Y = 13;
xMargin = 0.25;             %# left/right margins from page borders
yMargin = 0.25;             %# bottom/top margins from page borders
xSize = X - 2*xMargin;      %# figure size on paper (widht & height)
ySize = Y - 2*yMargin; 

set(gcf, 'PaperUnits', 'centimeters');
set(gcf, 'PaperSize', [X Y]);
set(gcf, 'PaperPosition', [0 0 xSize ySize]);
print('-depsc2', f);
3个回答

2

在使用print命令时,加上-loose选项,这样Matlab就不会裁剪输出结果。有关详细信息,请参阅print帮助文件。


这个答案实际上可能是最好的。它防止了我的图形被裁剪。然后我不得不在inkscape中编辑它们,但至少它们没有被截断。 - Veridian

1

我使用了你的代码并运行了它(当然,替换了变量以绘制虚拟数据),然后在Illustrator中加载了eps文件,结果很好。你使用的Matlab版本是哪个?

此外,以防万一,我稍微修改了一下代码,因为变量“f”未定义,我包含了代码和我得到的示例:

f=figure;
set(gcf, 'renderer', 'painters'); 

p_m_tt=10e-4*0:0.001:1;
p_m_oo=p_m_tt;
p_m_ot=p_m_oo;
p_fa_tt=rand(size(p_m_tt));
p_fa_oo=rand(size(p_m_tt));
p_fa_ot=rand(size(p_m_tt));
loglog(p_m_tt, p_fa_tt, 'k-', 'LineWidth', 2); hold on; 
loglog(p_m_oo, p_fa_oo, 'k--', 'LineWidth', 2); hold on; 
loglog(p_m_ot, p_fa_ot, 'k-.', 'LineWidth', 3); hold on; 

l = legend('Cam1-Cam1', 'Cam2-Cam2', 'Cam2-Cam1', ... 
    'Location', 'NorthEast'); 

fontSize = 20; 
xlabel('$P_{fa}$', 'fontsize', fontSize); 
ylabel('$P_{m}$', 'fontsize', fontSize); 

set(gca, 'XMinorTick', 'off', 'YMinorTick', 'off', 'YGrid', 'on', 'XGrid', 'on'); 
set(gcf, 'PaperPositionMode', 'auto'); 
set(gca, 'XTick', [0.00001 0.0001 0.001 0.01 0.1 1]); 
set(gca, 'MinorGridLineStyle', 'none'); 

set(gca, 'FontSize', fontSize); 
set(gcf, 'defaultAxesFontName', 'Times New Roman'); 

axis square; 

X = 13; 
Y = 13; 
xMargin = 0.25;             %# left/right margins from page borders 
yMargin = 0.25;             %# bottom/top margins from page borders 
xSize = X - 2*xMargin;      %# figure size on paper (widht & height) 
ySize = Y - 2*yMargin;  

set(gcf, 'PaperUnits', 'centimeters'); 
set(gcf, 'PaperSize', [X Y]); 
set(gcf, 'PaperPosition', [0 0 xSize ySize]); 
print('-depsc2', f,'figure2.eps');

enter image description here


谢谢,我正在运行7.10.0.499(R2010a),这让我感到困惑。 - Maurits
我在7.14.0.739 (R2012a 64位)中尝试了上述所有方法,也许你可以通过修改“Position”属性来将“y label”更靠近图表。 - Zegpi
很抱歉,它不起作用,每次都会以某种方式调整裁剪边框,导致标签的一部分被切掉。 - Maurits

1

不必修改图形的PaperPosition,也可以修改轴的position属性。可以通过以下方式获取当前设置:

get(gca, 'position')

ans =

0.1300    0.1300    0.7750    0.7750

这些代码表示 [左下 宽度 高度]。然后通过增加前两个数字和减少后两个数字来增加边距:

set(gca, 'position', [.15, .15, .74, .74]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接