</pre>写报告或论文时,为了充分利用篇幅和实现紧凑美观,我们常常想要得到空白冗余较小的图,这在Tikz里面十分容易实现。但是在Matlab里需要做很多的工作才能达到目的。</p><p></p><p>Matlab默认的图空白十分大,看起来很别扭:</p><p><pre name="code" class="plain">clear;close all;clc;
x=1:10;
y=x.^2;
figure
plot(x,y);
set(0,'defaultfigurecolor',[0.8 0.8 0.8]);
% set(0,'defaultfigurecolor',[1 1 1])
xlabel('x')
ylabel('y')
为了解决这个问题,我们可以得到textlabel的size,然后控制axes的position以达到我们期望的图:
ax = gca;
outerpos = ax.OuterPosition;
ti = ax.TightInset;
left = outerpos(1) + ti(1);
bottom = outerpos(2) + ti(2);
ax_width = outerpos(3) - ti(1) - ti(3);
ax_height = outerpos(4) - ti(2) - ti(4);
ax.Position = [left bottom ax_width ax_height];
这里给出的是一个简单的例子,实际的图可能比这个复杂很多。为了读者自己也能使用这个功能,有必要弄清楚三个概念:OuterPosition,Position,TightInset.
第一个是axes的外边框,默认是[0 0 1 1],即figure的最大范围,为了在图中看到这个范围,我们可以新建axes使其Position等于它:
figure
plot(x,y);
xlabel('x')
ylabel('y')
axes1=axes('Position',outerpos,'box','on','Color',[0, 1, 0, 0.1 ]);在上图中,透明的浅蓝色范围就是outerposition.
Position是axes的边框范围,在图中可见。
TightInset是axes的position外面textlabel的尺寸。
为了消除空白,我们将axes的position的左起点坐标值定义为TightInset的第一个值,即ylabel的宽度,这样就刚好预留出ylabel的空间。同样对于纵向起点有类似结论。
通过这个方法,无论图怎么变,我们总能将多余的空白消去。
本文介绍了在Matlab中如何消除图形空白,通过理解textlabel的size、axes的OuterPosition、Position和TightInset概念,调整Position的左起点坐标值以适应ylabel的宽度,从而确保无论图形如何变化,都能有效去除多余的空白。
2156

被折叠的 条评论
为什么被折叠?



