Matlab画图技巧之消除空白

来源:互联网 发布:jersey json 传递对象 编辑:程序博客网 时间:2024/06/05 08:04

</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;figureplot(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等于它:

figureplot(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的空间。同样对于纵向起点有类似结论。


通过这个方法,无论图怎么变,我们总能将多余的空白消去。

0 0
原创粉丝点击