在上一篇博客中,我们介绍了最基本的消除空白的情况,但是实际的应用往往比较复杂。为了让读者更清楚的了解消除空白的技巧,本文再提供两个稍微
复杂一点的例子。
例一是subplot:
clear ;close all;clc;
x=0:0.01:100;
y1=x.^2;
y2=sin(x).*exp(-0.02*x);
ff=figure
subplot(211)
plot(x,y1);
ylabel('y_1')
subplot(212)
plot(x,y2)
xlabel('x')
ylabel('y_2')如图,图片的右上空白较多,为了消除冗余空白,我们需要得到两个坐标轴的textlabel的size,然后计算得到我们想要的尺寸,代码如下(计算很简单,不作赘述):
ff.Children(1).Position;% lower plot
out1=ff.Children(1).OuterPosition;
ti1=ff.Children(1).TightInset;
ff.Children(2).Position;% upper plot
out2=ff.Children(2).OuterPosition;
ti2=ff.Children(2).TightInset;
hei=(1-ti1(2)-ti1(4)-ti2(2)-ti2(4))/2;
ti_1=max(ti1(1),ti2(1));
ti_3=max(ti1(3),ti2(3));
set(ff.Children(1),'Position',[ti_1,ti1(2),1-ti_1-ti_3,hei])
set(ff.Children(2),'Position',[ti_1,ti1(2)+hei+ti1(4)+ti2(2),1-ti_1-ti_3,hei])
如图,消除空白后的图看起来更加紧凑美观。
例二是plotyy,也是论文作图里常用的函数了:
figure
[ax,h1,h2]=plotyy(x,y1,x,y2);
xlabel('x')
ylabel(ax(1),'y1')
ylabel(ax(2),'y2')同样,该图看起来也有些臃肿,对于排版偏执狂来说是不可忍受的。消除该图的空白和上面的例子类似,但例一两图上下分布,而本图两个坐标轴重合在一起,执行的代码如下:
ti1=ax(1).TightInset;
ti2=ax(2).TightInset;
set(ax(1),'Position',[ti1(1),ti1(2),1-ti1(1)-ti2(3),1-ti1(2)-max(ti1(4),ti2(4))])最终效果如上图所示。
这就是本文的内容了,希望对大家的学习工作有帮助。关于如何用matlab制作高质量的图,请参考我的其他博客。
本文提供两个复杂的消除空白实例:subplot和plotyy的使用,帮助读者掌握在Matlab中制作高质量图表的方法。
1652

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



