1.控制坐标轴长度比率和数据单位长度
您可以控制 x 轴、y 轴和 z 轴的相对长度(图框纵横比),也可以控制一个数据单位沿每个轴的相对长度(数据纵横比)。
1.1图框纵横比
图框纵横比是 x 轴、y 轴和 z 轴的相对长度。默认情况下,图框纵横比基于图窗大小。您可以使用 pbaspect
函数更改纵横比。将纵横比设置为一个由正值组成的三元素向量,这些正值表示相对坐标轴长度。
例如,绘制一个拉长的圆的图。然后设置图框纵横比,以使 x 轴是 y 轴和 z 轴(未显示)长度的两倍。
t = linspace(0,2*pi);
plot(sin(t),2*cos(t))
grid on
pbaspect([2 1 1])
在三维视图中显示坐标区可查看 z 轴。
view(3)
对于方形坐标区,请使用 [1 1 1]
。此值类似于使用 axis square
命令。
t = linspace(0,2*pi);
plot(sin(t),2*cos(t))
grid on
pbaspect([1 1 1])
1.2数据纵横比
数据纵横比是沿 x 轴、y 轴和 z 轴的数据单位的相对长度。使用 daspect
函数可以更改数据纵横比。将数据纵横比设置为一个由正值组成的三元素向量,这些正值表示沿每个轴的数据单位的相对长度。
例如,设置此纵横比,以使沿 x 轴从 0 到 1 的长度等于沿 y 轴从 0 到 0.5 的长度和沿 z 轴(未显示) 0 到 2 的长度。
t = linspace(0,2*pi);
plot(sin(t),2*cos(t))
grid on
daspect([1 0.5 2])
在三维视图中显示坐标区可查看 z 轴。
view(3)
若要在所有方向采用相等的数据单位,请使用 [1 1 1]
。此值类似于使用 axis equal
命令。x 方向的一个数据单位与 y 和 z 方向的一个数据单位长度相同。
t = linspace(0,2*pi);
plot(sin(t),2*cos(t))
grid on
daspect([1 1 1])
1.3还原为默认比率
更改数据纵横比。然后使用 axis normal
命令还原为默认图框和数据纵横比。
t = linspace(0,2*pi);
plot(sin(t),2*cos(t))
grid on
daspect([1 1 1])
axis normal
2.控制坐标区布局
2.1与坐标区位置相关的属性
Axes
对象拥有多项属性,可用于控制坐标区大小以及标题和轴标签在图窗中的布局。
-
OuterPosition - 坐标区的外边界,包括标题、标签和边距。以
[left bottom width height]
形式的向量指定此属性。left
和bottom
值指示从图窗左下角到外边界左下角的距离。width
和height
值指示外边界尺寸。 -
Position - 绘图所在的内坐标区的边界,不包括标题、标签和边距。以
[left bottom width height]
形式的向量指定此属性。 -
TightInset - 为
Position
属性值中的宽度和高度所添加的边距,指定为[left bottom right top]
形式的向量。此属性是只读的。在添加轴标签和标题时,MATLAB® 会更新这些值以适应文本。Position
和TightInset
属性所定义的边界大小包含所有图形文本。 -
ActivePositionProperty -
Axes
对象的大小发生改变时保留下来的位置属性,指定为'outerposition'
(默认值)或'position'
。 -
Units - 位置单位。单位必须设置为
'normalized'
(默认值)以启用自动调整坐标区大小。当位置单位为长度单位(例如英寸或厘米)时,Axes
对象为固定大小。
2.2位置和边距的边界
下图显示了一个二维视图,其中 OuterPosition
值定义红色区域、Position
值定义蓝色区域,以及基于 Position
外扩 TightInset
值所定义的品红色区域。
下图显示了一个三维视图,同样包含了由 OuterPosition
值定义的坐标区外边界区域(红色)、Position
值定义的坐标区内边界区域(蓝色),以及在 Position
内边界基础上外扩 TightInset
值所定义的坐标区区域(品红色)。
2.3控制自动调整大小行为
某些情况可能触发 Axes
对象自动调整大小。例如,以交互方式调整图窗大小或添加标题或轴标签将激活自动调整大小。有时,新坐标区的大小无法同时满足 Position
和 OuterPosition
值,这种情况下需要使用 ActivePositionProperty
来指示要保留哪个值。将 ActivePositionProperty
指定为下列值之一:
-
'outerposition'
- 保留OuterPosition
值。如果不希望坐标区或任何周围文本超出特定外边界,可使用此选项。MATLAB 会调整坐标区内部区域大小(显示绘图时),以尽力在外边界范围内适应内容。 -
'position'
- 保留Position
值。如果希望坐标区的内部区域在图窗中保持特定大小,可使用此选项。此选项有时会导致文本溢出图窗。
通常,将 ActivePositionProperty
值设置为 'outerposition'
更可取。但是,坐标区标题或标签过长可能会使坐标区内部区域大大缩小,文字过小而难于阅读。在这种情况下,最好保持特定大小的内部坐标区,即使周围文本溢出了图窗也应如此。
例如,创建一个带有两个坐标区的图窗,并为每个坐标区位置指定相同的宽度和高度。对于上坐标区,将 ActivePositionProperty
值设置为 'outerposition'
,对于下坐标区则设置为 'position'
。注意,在上坐标区中,内部区域会缩小以适应文本,但文本不会溢出图窗。在下坐标区中,会保留内部区域的大小,但部分文本被截断。
figure;
ax1 = axes('Position',[0.13 0.58 0.77 0.34]);
ax1.ActivePositionProperty = 'outerposition';
plot(ax1,1:10)
title(ax1,'Preserve OuterPosition')
yticklabels(ax1,{'My incredibly descriptive, excessively wordy, and overly long label',...
'label 2','label 3'})
ax2 = axes('Position',[0.13 0.11 0.77 0.34]);
ax2.ActivePositionProperty = 'position';
plot(ax2,1:10)
title(ax2,'Preserve Position')
yticklabels(ax2,{'My incredibly descriptive, excessively wordy, and overly long label',...
'label 2','label 3'})
2.4伸展填充行为
默认情况下,MATLAB 会伸展坐标区以填充可用的空间。这种“伸展填充”行为可能会导致部分扭曲。坐标区可能与其 DataAspectRatio
、PlotBoxAspectRatio
和 CameraViewAngle
属性中存储的数据纵横比、图框纵横比和照相机视角值不完全匹配。Axes
对象的 DataAspectRatioMode
、PlotBoxAspectRatioMode
和 CameraViewAngleMode
属性设置为 'auto'
时,会启用“伸展填充”行为。
如果您指定数据纵横比、绘图框纵横比或照相机视角,则会禁用“伸展填充”行为。如果禁用“伸展填充”行为,MATLAB 会使坐标区在可用空间内尽可能大并严格遵循属性值,不会出现扭曲。
例如,以下图窗分别显示了同一绘图在启用和未启用“伸展填充”行为时的效果。点线显示由 Position
属性定义的可用空间。在两种情况中,数据纵横比、绘图框纵横比和照相机视角值是相同的。但是,在左侧绘图中,伸展造成了一定的扭曲。
启用伸展填充(一定的扭曲) | 禁用伸展填充(无扭曲) |
---|---|