1.坐标区纵横比属性
axis 命令通过设置各种坐标区对象属性来实现效果。您可以直接设置这些属性,精确实现您想要的效果。
属性 | 描述 |
---|---|
DataAspectRatio | 设置各个坐标轴数据值的相对比例。将 通过 daspect 进行设置 |
DataAspectRatioMode | 在 |
PlotBoxAspectRatio | 设置坐标区图框的比例(将 通过 pbaspect 进行设置 |
PlotBoxAspectRatioMode | 在 |
Position | 通过四元素向量([左偏移、下偏移、宽、高])定义坐标区的位置和大小。 |
XLim, YLim, ZLim | 设置各个轴的最小范围和最大范围。 |
XLimMode , YLimMode , ZLimMode | 在 |
当模式属性设置为 auto
时,MATLAB 会自动确定所有这些属性的值,然后伸展坐标区以适合图窗形状。通过指定属性值或将模式属性设置为手动,可以覆盖任何属性的自动操作。
您为特定属性选择的值主要取决于要显示的数据类型。通过 MATLAB 可视化的大部分数据都属于以下两种情况之一:
-
以线图、网格图或其他专业绘图方式显示的数值数据
-
真实世界对象(例如,机动车辆或地球地形剖面图)的表示
在第一种情况下,通常需要选择能够在每个轴方向提供清晰分辨率并能填满可用空间的坐标轴范围。但是,对于真实世界对象,则需要按比例精确表示,而不管视角如何。
MATLAB 的默认属性值用于
-
选择坐标轴范围以涵盖数据范围(当
XLimMode
、YLimMode
、ZLimMode
设置为auto
时)。 -
通过单独设置每个轴的标度,在可用空间提供最高分辨率(当
DataAspectRatioMode
和PlotBoxAspectRatioMode
设置为auto
时)。 -
通过调整
CameraViewAngle
来绘制适合位置矩形的坐标区,然后根据需要对坐标区进行伸展填充。
2.默认纵横比选择
坐标区属性 Position
指定坐标区在图窗中的位置和尺寸。Position
向量的第三个和第四个元素(宽度和高度)定义了一个矩形,MATLAB 将在其中绘制坐标区。MATLAB 将调整坐标区以适合该矩形。
坐标区属性 Units
的默认值根据父图窗尺寸进行归一化。这意味着图窗窗口的形状决定位置矩形的形状。当您更改图窗窗口的大小时,MATLAB 会调整位置矩形的形状以适合图窗。
sphere
set(gcf,'Color',[0.90 0.90 0.90])
set(gca,'BoxStyle','full','Box','on')
更改图窗的大小和形状将导致坐标区的大小和形状发生变化。坐标区也可以选择新的轴刻度线位置。
f = gcf;
f.Position(3) = f.Position(3) * 0.67;
重新调整坐标区的形状以适合图窗窗口可能会更改图形的纵横比。MATLAB 将调整坐标区以填满位置矩形,在此过程中可能会导致形状变形。这通常适用于数值数据图形,但不适用于真实显示的对象。
3.通过调整图窗大小保持坐标区比例
要保持特定的形状,您可以用独立于图窗窗口大小的绝对单位(如英寸)指定坐标区大小。但是,如果您要编写能够适合任意图窗窗口大小的 MATLAB 程序,这并不是一个好方法。更好的做法是指定坐标区的纵横比并覆盖自动伸展填充。
如果您需要特定的纵横比,可以通过指定以下坐标区属性值来覆盖伸展填充:
-
DataAspectRatio
或DataAspectRatioMode
-
PlotBoxAspectRatio
或PlotBoxAspectRatioMode
-
CameraViewAngle
或CameraViewAngleMode
前两组属性直接影响纵横比。将任一模式属性设置为 manual 只会禁用伸展填充,而当前所有属性值都保持不变。在这种情况下,MATLAB 将放大坐标区,直到受限于位置矩形的一个维度为止。例如,将 DataAspectRatio
设置为 [1 1 1]
。此外,设置图窗颜色,以查看图窗与坐标区之间的关系。
sphere
daspect([1 1 1])
set(gca,'BoxStyle','full','Box','on')
set(gcf,'Color',[0.90 0.90 0.90])
更改图窗的大小和形状不会改变坐标区的纵横比。
f = gcf;
f.Position(3) = f.Position(3) * 0.67;
设置 CameraViewAngle
属性将禁用伸展填充,还可以防止 MATLAB 在您更改视图时重新调整坐标区的大小。
4.纵横比属性
了解属性之间如何相互影响很重要,这样才能获得您想要的结果。DataAspectRatio
、PlotBoxAspectRatio
以及 x、y 和 z 坐标轴范围(XLim
、YLim
和 ZLim
属性)都会限制坐标区的形状。
4.1数据纵横比
DataAspectRatio
属性控制轴刻度的比例。例如,要显示数学表达式的曲面图,MATLAB 会选择突出显示函数值的数据纵横比:
[X,Y] = meshgrid((-2:.15:2),(-4:.3:4));
Z = X.*exp(-X.^2 - Y.^2);
surf(X,Y,Z)
set(gca,'BoxStyle','full','Box','on')
daspect 函数返回 DataAspectRatio
属性的实际值。
daspect
ans = 1×3 4 8 1
这意味着 x 轴上四个单位的长度覆盖的数据值范围与 y 轴上八个单位以及 z 轴上一个单位覆盖的数据值范围相同。坐标区填充的图框的默认纵横比为 [1 1 1]
。
如果要查看曲面图以使每个轴上的相对大小彼此相等,可将 DataAspectRatio
设置为 [1 1 1]
。
daspect([1 1 1])
设置 DataAspectRatio
属性值还会将 DataAspectRatioMode
设置为 manual
并覆盖伸展填充,以实现指定的纵横比。
4.2图框纵横比
观察上一节中图的 PlotBoxAspectRatio
值,可以看到它现在采用了之前的 DataAspectRatio
值。pbaspect 函数返回 PlotBoxAspectRatio
的值:
pbaspect
ans = 1×3 4 8 1
请注意,MATLAB 使用指定的 DataAspectRatio
重新缩放图框以适应该图形。
PlotBoxAspectRatio
属性控制坐标区图框的形状。默认情况下,MATLAB 将此属性设置为 [1 1 1]
并调整 DataAspectRatio
属性,以使图形填满图框或直至受到约束为止。
如果您设置了 DataAspectRatio
值从而防止它改变,则 MATLAB 会更改 PlotBoxAspectRatio
。
如果您同时指定 DataAspectRatio
和 PlotBoxAspectRatio
,MATLAB 将被迫更改坐标轴范围,以遵守您已定义的两个约束。
继续网格示例,如果您同时设置了这两个属性,MATLAB 将更改坐标轴范围,以满足施加于坐标区的两个约束。
daspect([1 1 1])
pbaspect([1 1 1])
4.3调整坐标轴范围
坐标区还具有用于设置 x 轴、y 轴和 z 轴范围的属性。但是,使用 PlotBoxAspectRatio
和 DataAspectRatio
属性指定坐标轴范围会过度约束坐标区。例如,以下命令指定的坐标轴范围将会与 PlotBoxAspectRatio
值相冲突。
set(gca,'DataAspectRatio',[1 1 1],...
'PlotBoxAspectRatio',[1 1 1],...
'XLim',[-4 4],...
'YLim',[-4 4],...
'ZLim',[-1 1])
如果查询绘图框的纵横比,您会发现 PlotBoxAspectRatio
值已更改,以适应坐标轴范围。
pbaspect
ans = 1×3 4 4 1
5.显示真实对象
如果要使显示的对象看起来很逼真,您需要更改 MATLAB 的默认值。例如,以下数据定义一个楔形补片对象。
vert = [0 0 0; 0 1 0; 1 1 0; 1 0 0; 0 0 1; 0 1 1; 1 1 4; 1 0 4];
fac = [1 2 3 4; 2 6 7 3; 4 3 7 8; 1 5 8 4; 1 2 6 5; 5 6 7 8];
patch('Vertices',vert,'Faces',fac,...
'FaceColor',[0.7 0.7 0.7],'EdgeColor','k')
view(3)
但是,这个坐标区使这些数据定义的实体对象的实际形状变得失真。要按正确的比例显示它,需要设置 DataAspectRatio
。设置此属性将使 x、y 和 z 方向上的单位相等,并且会阻止坐标区伸展以填充位置矩形,从而显示对象的真实形状。
set(gca,'DataAspectRatio',[1 1 1])