Matlab画图技巧之消除空白(二)

本文提供两个复杂的消除空白实例:subplot和plotyy的使用,帮助读者掌握在Matlab中制作高质量图表的方法。

在上一篇博客中,我们介绍了最基本的消除空白的情况,但是实际的应用往往比较复杂。为了让读者更清楚的了解消除空白的技巧,本文再提供两个稍微

复杂一点的例子。


例一是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制作高质量的图,请参考我的其他博客。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值