创建图形时,MATLAB会自动控制坐标轴的范围、标记位置和标记的标签。但是,可以通过设置合适的属性来手工指定这些值。
给模式控制的属性(如XLim属性有一个相连的XLimMode属性)指定值时,MATLAB会将模式设置为手工方式,并覆盖自动指定方式。因为这些模式属性的默认值是auto,调用高级函数如plot或surf等会将这些模式重置为auto。
2.2.1. 设置坐标轴对应的值的范围
MATLAB基于数据范围自动确定每个坐标轴上值的范围,可以通过指定XLim,YLim或ZLim来覆盖这些选定的范围。
绘制函数\(A{e}^{-\alpha t}\)的图形,其中A=0.25,\(\alpha\) =0.05,t=0~900。
>> t=0:900;
>> plot(t,0.25*exp(-0.05*t))
图2-3中,图(a)显示了绘制结果。MATLAB会选择在x和y轴方向上把数据压缩到坐标轴范围内。但是,因为图形包含少量t=100秒以外的信息,改变x轴的限制可以改进图形的有用性。下面的语句
>> set(gca,'XLim',[0 100])
创建图2-3(b)。
(a) (b)
图2-3 设置坐标轴上值的范围
半自动化设置坐标轴上值的范围
可以指定坐标系范围限制的最小值或最大值,并允许其他限制自动调整大小,可以手工设置一个上限或下限,与Inf或-Inf一起设置范围,如
>> set(gca,'XLim',[0 Inf])
把XLimMode属性设置为auto并允许MATLAB确定XLim的最大值。类似地,下面的语句将XLimMode属性的值设置为auto并允许MATLAB确定XLim的最小值。
>> set(gca,'XLim',[-Inf 800])
MATLAB基于数据范围选择标记位置并生成等间隔的标记。可以用XTick,YTick和ZTick属性指定其他标记。
在例1-28代码的基础上添加下面的代码。如果值0.075是函数\(A{e}^{-\alpha t}\)的图形上感兴趣的点,可以通过指定标记来包括这些值
>> set(gca,'YTick',[0 0.05 0.075 0.1 0.15 0.2 0.25])
结果如图2-4中所示。
图2-4 在图上标记感兴趣的点
axis函数
axis函数设置坐标轴的范围和纵横比。
axis(limits) 指定当前坐标的范围。以包含 4 个、6 个或 8 个元素的向量指定范围。
axis style 使用预定义样式设置轴范围和标尺。例如,将样式指定为 equal 以便沿着每个坐标轴使用相等的数据单位长度。
axis mode 设置 MATLAB® 是否自动选择范围。将模式指定为 manual、auto 或半自动选项之一,例如 'auto x'。
axis ydirection,其中 ydirection 为 ij,即将原点放在坐标的左上角。y 值按从上到下的顺序逐渐增加。ydirection 的默认值为 xy,即将原点放在左下角。y 值按从下到上的顺序逐渐增加。
axis visibility,其中 visibility 为 off,即关闭坐标区背景的显示。而坐标区中的绘图仍会显示。visibility 的默认值为 on,即显示坐标区背景。
lim=axis 返回当前坐标区的 x 轴和 y 轴范围。对于三维坐标区,还会返回 z 轴范围。对于极坐标区,它返回 theta 轴和 r 轴范围。
[m,v,d]=axis('state') 返回轴范围选择、坐标区可见性和 y 轴方向的当前设置。在以后的版本中将会删除该语法。请改用坐标区的 XLimMode、YLimMode、ZLimMode、Visible 和 YDir 属性来获取这些值。
___=axis(ax,___) 使用 ax 指定的坐标区或极坐标区,而不是使用当前坐标区。指定 ax 作为上述任何语法的第一个输入参数。将字符向量类型的输入参数用单引号引起来,例如 axis(ax,'equal')。
本例先生成一条函数曲线。
>> x=linspace(0,2*pi);
>> y=sin(x)+cos(x);
>> plot(x,y)
生成图2-5(a)。用axis重新定义坐标轴的范围。
>> axis([0 2*pi -1.5 1.5])
生成图2-5(b)。
(b)
图2-5 用Axis函数定义坐标轴的范围
axis函数的语法格式第2条,即
axis style
其中,style的取值可以是tight|fill(默认)|equal|image|square|vis3d|normal。
各取值的含义为:
tight – 坐标轴范围取数据的范围,即各方向上数据的最小值和最大值。
equal – 坐标轴不同方向上的长度取相同的度量单位。
image – 坐标轴不同方向上取相同的单位长度,外框紧密包围数据。
square – 坐标轴不同方向上的长度相等,即外框为正方形或立方体。
fill – 坐标轴不同方向上的长度恰好围成由坐标系的Position属性定义的位置和大小。为默认选项。
vis3d – 冻结纵横比属性。
normal – 还原默认设置。
生成曲面图,各坐标轴方向上的度量单位相同。
>> surf(peaks);
>> axis equal
生成图2-6(a)。
用axis设置坐标轴,使各方向上的坐标轴长度相等。
>> axis square
生成图2-6(b)。
(a) (b)
图2-6 axis style设置效果
xlim, ylim, zlim函数
xlim, ylim, zlim函数设置和查询X轴、Y轴和Z轴的范围。下面以xlim函数为例介绍它们的语法格式。
xlim(limits) 设置当前坐标或图的X轴范围。将limits指定为 [xmin xmax] 形式的二元素向量,其中xmax大于xmin。
xl=xlim 以二元素向量形式返回当前范围。
xlim auto 设置自动模式,使坐标确定X轴范围。范围将跨越绘图数据范围。如果更改了范围,然后又想将它们设置回默认值,则可以使用此选项。此命令会将坐标的XLimMode属性设置为'auto'。
xlim manual 设置手动模式,将范围冻结在当前值。当使用hold on命令向坐标添加新数据时,如果要保留当前范围,请使用此选项。此命令会将坐标的XLimMode属性设置为'manual'。
m=xlim('mode') 返回当前X轴范围模式:'auto'或'manual'。默认情况下,该模式为自动,除非您指定范围或将模式设置为手动。
___=xlim(target,___) 使用由target指定的坐标或图,而不是当前坐标。指定 target作为上述任何语法的第一个输入参数。如果原始语法支持输出参数,则可以包含输出参数。模式输入应放在单引号内,例如xlim(target,'auto')。
下面用xlim函数达到跟例1-28一样的设置效果。
>> x=linspace(0,2*pi);
>> y=sin(x)+cos(x);
>> plot(x,y)
>> xlim([0 2*pi])
生成的图形与图2-3(b)的相同。
设置坐标轴的属性
坐标轴是线形图形元素,可以设置坐标轴的颜色、线型和线宽。使用坐标系对象的XAxis属性获取X轴,用YAxis属性获取Y轴,然后设置坐标轴的属性。
本例绘制曲线图,设置X轴为红色,线宽为2。
>> x=linspace(0,2*pi);
>> y=sin(x)+cos(x);
>> plot(x,y)
>> ax=gca().XAxis;
>> ax.LineWidth=2;
>> ax.Color='red';
设置效果如图2-7所示。
图2-7 设置坐标轴的属性 图2-8 设置坐标轴的标题
设置坐标轴的标题
使用xlabel函数和ylabel函数可以设置坐标轴的标题,使用参数-值匹配对可以设置标题的字体。
本例绘制曲线图,给X轴和Y轴添加标题“x”和“sin(x)”。
>> x=linspace(0,2*pi);
>> y=sin(x)+cos(x);
>> plot(x,y)
>> xlabel('x','FontSize',14);
>> ylabel('sin(x)','FontSize',14);
设置效果如图2-8所示。
设置分类坐标轴
默认时MATLAB中用plot函数绘图时X轴和Y轴都是数值轴,但很多时候,我们需要用线形图等来表现不同类别的统计数据,所以要求X轴是分类轴。此时需要将X轴数据转换为分类数值类型的数据。
本例利用给定的1~4月的销售数据绘制线形图。
>> x=["一月", "二月", "三月", "四月"];
>> y=[100, 80, 120, 150];
>> plot(categorical(1:4,1:4,x,"Ordinal",true),y,'r-')
>> title('商场各月销售额')
>> ylabel('销售额(万元)','FontSize',14)
生成线形图如图2-9所示。可见X轴的刻度标签设置成了月份表示的类别数据。
图2-9 设置分类轴