1. 问题
有时我们Matlab绘制子图的时候需要子图的刻度等比例,然而子图的刻度范围却不一致。该如何解决?
2. 方法
这是需要使用设置坐标轴句柄gca
的位置。
>> gca
ans =
Axes - 属性:
XLim: [0 1]
YLim: [0 1]
XScale: 'linear'
YScale: 'linear'
GridLineStyle: '-'
Position: [0.1300 0.1100 0.7750 0.8150]
Units: 'normalized'
position的四个参数分别代表xy轴的起点坐标(左下角),xy轴的长度分数。图窗满长度为1。
3. 代码
这里看一个例子。上图横坐标范围为[0 10],下图为[0 20]。所以若要横坐标成比例,需要轴的宽度也是1:2。
这里设置下图的起点坐标为[0.1 0.1],宽度为0.8,高度为0.4。
则上图宽度为0.8的一半,即0.4,高度还是0.4。但是需要注意的是现在起始坐标变成了[0.1 0.55]。因为下图的y轴的范围是[0.1 0.1+0.4]=[0.1 0.5]。为了防止二图覆盖,上图的起始y坐标必须大于0.5,这里选择0.55。
x1=0:0.1:10;
y1=sin(x1);
x2=0:0.1:20;
y2=sin(x2);
figure
subplot(211)
plot(x1,y1,'r','linewid',2)
set(gca,'position',[0.1 .55 .4 .4]);
subplot(212)
plot(x2,y2,'r','linewid',2)
set(gca,'position',[0.1 .1 .8 .4]);
也可以设置下图上边界和上图下边界重合。
x1=0:0.1:10;
y1=sin(x1);
x2=0:0.1:20;
y2=sin(x2);
figure
subplot(211)
plot(x1,y1,'r','linewid',2)
set(gca,'position',[0.1 .5 .4 .4],'xticklabel',[]);
subplot(212)
plot(x2,y2,'r','linewid',2)
set(gca,'position',[0.1 .1 .8 .4]);