matlab中,figure和axes中'position'属性中大小是什么关系?

按照下面的程序,大小范围是不匹配的。 figure('Position',[100 , 200 , 800, 600 ]); axes('Positi…

figure和axes分别对应整个画布和画布中的坐标区域,可以认为axes包含在figure里面,大致是如下关系:(下图大致显示 figure(蓝色)和 axes(红色)定义的区域)

figure和axes都有多个位置属性,主要是 Position 和 OuterPosition;

1. Axes

先看在figure内部的axes:

MATLAB 按照归一化的容器单位来测量值,容器的左下角映射到(0,0),右上角映射到(1,1)

下图显示由OuterPosition值(蓝色)和Position值(红色)定义的区域。

举几个例子来观察一下OuterPositionPosition 属性:

1.1 Axes 的 OuterPosition 属性

先来看OuterPosition 的不同情况,该属性指定范围包括标签和边距(与Position属性的区别所在)

(1)axes('OuterPosition',[0,0,1,1]) (默认情况下,OuterPosition属性为[0,0,1,1],即代表figure内部可绘制区域的所有部分),下图蓝色区域,两侧和上方一小部分空白区域应该不算OuterPosition范围,文中将这部分差别忽略,不影响对于figure和axes的理解;

(2)axes('OuterPosition',[0,0,0.8,0.8]) 此时axes区域高度与宽度方向均只有figure限定的范围的80%(此时蓝框应该比整个figure可显示区域要小)如下图

(3)axes('OuterPosition',[0,0,1.2,1.2]) 此时设置区域将超出figure限定的范围(此时蓝框应该比整个figure还要大,但figure限定了显示区域)如下图

此时,axes区域将有一部分在figure外部而无法显示完全;

OuterPositon 属性设置大小一般就默认[0,0,1,1]就可以;

1.2 Axes的Position 属性

再来看axes的Position 属性,该属性指定区域不包括标签边距

此处OuterPosition 为默认值[0,0,1,1];

默认情况下axes的Position 属性值为[0.13 , 0.11 , 0.775 , 0.815],

如下图所示:

默认情况下,该属性代表意义如下绿色标注,(与OuterPosition类似,指定在figure规定范围内的坐标区域)

1.3 axes中OuterPosition与Position属性的区别

最关键的区别在于OuterPosition包含标题和边框而Position不包含这些;

用下面代码来对比一下两个属性划定的范围:

axes('OuterPosition',[0,0,0.5,0.5])
axes('Position',[0.5,0.5,0.5,0.5])

2. Figure

再来看figure,帮助文档中说明如下:

OuterPositon:指定可绘制区域的位置和大小,此区域包含图窗边框、标题栏、菜单栏和工具栏;

Position:指定可绘制区域的位置和大小,该区域不包含图窗边框、标题栏、菜单栏和工具栏;

但在实际情况中,两种属性区别很小,显示效果几乎一致;

对于在实时脚本中显示的figure,OuterPositionPosition似乎没有区别;对于弹出的图窗窗口,也仅仅时坐标区外围空白区域的颜色区别(灰色和白色),如下图:

举个例子: figure('Position',[0,0,400,300])

其中 [0,0,400,300] 前两个元素默认代表显示器像素点起始位置,此处 [0,0] 即代表电脑(一块屏幕)显示器左下角位置(需隐藏任务栏方可无遮挡显示),另外后两个元素 [400,300] 代表该画布像素大小为 400×300;

绘制一个随机散点图,结果如下,画布在整个屏幕左下角,除图窗边框、标题栏、菜单栏和工具栏的剩余部分的大小大小为 400×300;

如果使用OuterPosition属性的话,如下所示,几乎一致

使用分辨率为1920×1080的电脑显示器,创建figure如下:

figure('Position',[0,0,960,1080])打开的图窗将刚好占满左边半个屏幕;

3. 总结及扩展

以上就是Axes和figure中位置参数的区别,另外可以使用axes的Position实现画中画,只需要将第二个坐标轴范围限定在第一个坐标轴范围内部,调整位置即可

figure
% ax1默认参数即可
plot(x1,y1)
% 设置小图的范围
ax2 = axes('Position',[0.545 0.58 0.34 0.32]);
plot(x2,y2)