7.2  二维图形

MATLAB提供了众多的二维图形绘图函数,这些函数的分类[R.D.1] 如图7-3所示。

可以看出,MATLAB基本的二维图形包括线型(line)、条型(bar)、区域型(area)、方向矢量型(direction)、辐射型(radial)、散点型(scatter)等多种类型,图中已经将各个函数所能够绘制图形的基本样式做了小的缩略图。本节介绍常用二维绘图函数的使用。至于其他绘图函数,因篇幅有限,这里不再介绍,请读者查阅帮助文档。

7.2.1  基本绘图函数

本小节介绍最基本的plot函数的使用方法。plot函数用于绘制二维线形图形,其具体调用语法如下。

(1)plot(Y):如果Y为实数向量,其长度为m,则plot(Y)等价于plot(X,Y),其中X=1:m;如果Y为实数矩阵,则把Y按列的方向分解成几个列向量,而Y的行数为n,则plot(Y)等价于plot(X,Y),其中X=1:n;如果Y为一个复数,则函数plot(Y)等价于plot(real(Y),imag(Y))。

(2)plot(X1,Y1,...,Xn,Yn):Xi与Yi成对出现,该函数将分别按顺序取两个数据Xi与Yi绘图。如果其中仅有Xi或Yi是矩阵,其余的为向量,向量长度与矩阵的长度匹配,则按匹配的方向来分解矩阵,再分别将配对的向量绘制出来。

(3)plot(X1,Y1,LineSpec,...):将按顺序分别绘出由3个参数Xi、Yi和LineSpec定义的线条。其中参数LineSpec指明了线条的类型、标记符号和绘制线用的颜色。

(4)plot(...,'PropertyName',PropertyValue,...):对所有的用plot创建的line图形对象中指定的属性进行恰当的设置。

(5)plot(axes_handle,...):在指定的坐标轴上绘制。

(6)h = plot(...) :返回值为line图形对象句柄的一列向量,一个线条对应一个句柄值。

【例7-3】  plot绘图简单示例。

>> t=(0:pi/50:2*pi)';k=0.4:0.1:1;Y=cos(t)*k;plot(t,Y)

绘制的结果如图7-4所示。

本例中将多个曲线数据以矩阵的形式作为plot的输入变量,多条曲线便同时绘制在了一张结果图中。读者可再尝试plot(t)、plot(Y)、plot(Y,t),然后观察生成图形的区别。

【例7-4】  在原有图形上添加新的曲线。

有时我们需要在已有的结果图上再绘制其他的曲线,这就需要用到hold on命令。如果不再需要在当前图形窗口添加绘制其他曲线,则可使用holdoff命令来取消继续绘图的状态。另外再指出一点,在之前版本中,如果使用hold on命令多次画图生成的图形中多条曲线是默认相同颜色的,而在2014b版本中,多次绘图的话系统会自动更改颜色以区分结果。下面在上例的基础上添加新的曲线图形。

>> t=(0:pi/50:2*pi)';

k=0.4:0.1:1;Y=cos(t)*k;plot(t,Y)    %  绘制二维曲线图

>> hold on                               %  打开继续绘图状态

>> plot(t,Y+0.5)                           %  绘制新的曲线

绘制的结果如图7-5所示。

图7-4  plot绘图简单示例

图7-5  添加新的曲线

【例7-5】  用复数矩阵形式画李萨如图形。

t=linspace(0,2*pi,80)';      %  在[0,pi]之间产生80个等距的采样点

X=[cos(t),cos(2*t),cos(3*t)]+1i*sin(t)*[1,1, 1]; %(80×3)的复数矩阵

axis square                    %  使坐标轴长度相同

legend('1','2','3')           %  图例

本例中,表达式1i*sin(t)*[1,1, 1]中采用1i代替了虚数单位i,在新版的MATLAB中,这样做可以提高算法的运行速度和鲁棒性。本例绘制的结果如图7-6所示。

【例7-6】  采用模型画一组椭圆。

th = [0:pi/50:2*pi]';

a = [0.5:.5:4.5];

X = cos(th)*a;

Y = sin(th)*sqrt(25-a.^2);

plot(X,Y),axis('equal'),xlabel('x'),ylabel('y')

title('A set of Ellipses')

绘制的结果如图7-7所示。

图7-6 李萨如图形

图7-7  一组椭圆

7.2.2  曲线的色彩、线型和数据点型

为了使曲线更加直观,同时在复杂图形中便于分辨各个数据系列,在MATLAB中,用户可以为曲线设置不同的颜色、线型和数据点行属性。

在MATLAB中,关于曲线的线型和颜色参数的设置如表7-2所示。

表7-2                                                    曲线线型和颜色参数

线型符号

含    义

色彩符号

含    义

当plot中没有设定线型和颜色时,MATLAB将使用默认的设置画图。默认的设置为:曲线一律使用实线类型;不同的曲线按照表7-2中的顺序着色,依次为蓝、绿、红、青、品红等。

MATLAB中,除了可以为曲线设置颜色、线型外,还可以为曲线中的数据点设置不同的数据点型。这样用户可以通过点型的设置,很方便地将不同的曲线分开。MATLAB中数据点型的属性如表7-3所示。

表7-3                                                      数据点型属性列表

符    号

含    义

符    号

含    义

实心黑点

六角星符

空心圆圈

朝上三角符

五角星符

朝左三角符

朝右三角符

朝下三角符

【例7-7】  曲线的色彩、线型和数据点型使用示例。

绘制不同范围内的正弦函数,演示不同线型、色彩和数据点型的使用。

t = 0:pi/20:2*pi;

plot(t,sin(t),'-.r*')

plot(t,sin(t-pi/2),'--mo')

plot(t,sin(t-pi),':bs')

以上代码运行的结果如图7-8所示。

另外还可以通过使用plot(...,'PropertyName', PropertyValue,...)格式对曲线的属性进行设置:

figure                                 %  生成新的绘图窗口

plot(t,sin(2*t),'-mo',...

'LineWidth',2,...                   %  设置曲线粗细

'MarkerEdgeColor','k',...          %  设置数据点边界颜色

'MarkerFaceColor',[.49 1.63],...   %  设置填充颜色

'MarkerSize',12)                     %  设置数据点型大小

运行的结果如图7-9所示。

图7-8 不同线型、色彩和数据点型的使用

图7-9  曲线属性的设置

7.2.3  坐标、刻度和网格控制

图表的坐标轴对图表的显示效果有着比较明显的影响。尽管MATLAB提供了考虑比较周全的坐标轴默认设置,但并不是所有图形的默认设置都是最好的。用户可以根据需要和偏好来设置坐标轴的属性。为此,MATLAB提供了一系列的关于坐标轴设置的命令,用户可以根据情况选取合适的命令,调整坐标轴的取向、范围、刻度、高宽比、网格等。

1.坐标控制

坐标控制命令axis的用途很多,表7-4列出了常用的坐标控制命令。

表7-4                   常用的坐标控制命令

命    令

含    义

命    令

含    义

使用默认设置

纵横坐标采用等长刻度

axis manual

使当前坐标范围不变

在manual方式下起作用,使坐标充满整个绘图区

取消坐标轴背景

纵横坐标采用等长刻度,且坐标框紧贴数据范围

打开坐标轴背景

axis normal

默认矩形坐标系

矩阵式坐标,原点在左上角

axis square

正方形坐标系

普通直角坐标,原点在左下角

把数据范围直接设为坐标范围

axis([xmin xmax ymin ymax])

axis([xmin xmax ymin ymax zmin zmax cmin  cmax])

人工设定坐标范围

保持高宽比不变,用于三维旋转时,可避免图形大小变化

【例7-8】  坐标轴设置使用示例。

>> x = 0:.025:pi/2;

>> plot(x,tan(x),'-ro')

以上代码的运行结果如图7-10所示。

>> axis([0  pi/2 0  5])

以上代码运行的结果如图7-11所示。

图7-10  原始图形

图7-11  设置过坐标轴之后的图形

【例7-9】  观察各种轴控制指令的影响。演示采用长轴为3.25、短轴为1.15 的椭圆。

t=0:2*pi/99:2*pi;

x=1.15*cos(t);y=3.25*sin(t);       %  y为长轴,x为短轴

subplot(2,3,1),plot(x,y),axis normal,grid on,

title('Normal and Grid on')

subplot(2,3,2),plot(x,y),

axis equal,grid on,title('Equal')

subplot(2,3,3),plot(x,y),

axis square,grid on,title('Square')

subplot(2,3,4),plot(x,y),

axis image,box off,title('Image and Boxoff')

subplot(2,3,5),plot(x,y),

axis image fill,box off

title('Image and Fill')

subplot(2,3,6),plot(x,y),

axis tight,box off,title('Tight')

以上代码运行的结果如图7-12所示。

图7-12  各种轴控制命令的不同影响

MATLAB中没有现成的高层指令用于设置坐标刻度,因此必须通过如下的对象句柄命令进行坐标刻度的设置。

(1)set(gca,'Xtick',xs,‘Ytick’,ys):二维坐标刻度的设置

(2)set(gca,'Xtick',xs,‘Ytick’,ys,‘Ztick’,zs):三维坐标刻度的设置。

xs、ys、zs可以是任何合法的实数向量,它们分别决定x、y、z轴的刻度。

(1)grid:是否画分网格线的双向切换命令。

(2)grid on:画分网格线。

(3)grid off:不画网格线。

4.坐标框

默认情况下,所画的坐标呈封闭形式。假如用户需要开启形式坐标系,可以使用以下指令。

(1)box:坐标形式在封闭式和开启式之间切换命令。

(2)box on:使当前坐标呈封闭形式。

(3)box off:使当前坐标呈开启形式。

【例7-10】  在【例7-7】的基础上进行刻度、网格线和坐标框设置示例。

t = 0:pi/20:2*pi;

plot(t,sin(t),'-.r*')

plot(t,sin(t-pi/2),'--mo')

plot(t,sin(t-pi),':bs')

set(gca,'Xtick',[pi/2,pi,pi*3/2,2*pi],'Ytick', [-1,-0.5,0,0.5,1])

以上代码运行的结果如图7-13所示。比较图7-13和图7-8,可以看出进行了刻度、网格线和坐标框设置之后的效果。

图7-13  刻度、网格线和坐标框设置

7.2.4  图形标识

在MATLAB中提供了多个图形标识命令,用户可以用这些命令来添加图形标识。常见的图形标识包括:图形标题、坐标轴名称、图形注释、图例等。关于这些图形标识,MATLAB提供了简洁命令以及精细命令两种方式。

1.间接命令方式

(1)title(S):标注图名。

(2)xlabel(S):横坐标轴名称。

(3)ylabel(S):纵坐标轴名称。

(4)legend(S1,S2,…):绘制曲线所用线形、色彩或数据点型图例说明。

(5)text(xt,yt,S):在图中(xt, yt)位置标注内容为S的注释。

2.精细命令方式

MATLAB中所有涉及图形字符串标识的命令(如title、xlabel、ylabel、legend、text等命令)都能对字符标识进行以下更精细的控制。

(1)允许标识多行字符

标识多行字符可以使用元胞数组,也可以使用多行字符串数组。比较而言,元胞数组更加灵活方便。具体见表7-5。

表7-5                      多行字符标识规则

命    令

举     例

示例命令

效     果

任何合法字符

'single line'

single line

{'arg1','arg2'}

{'12345','1234','123'}

['arg1';'arg2']

['12345';'1 234';'1 2 3']

(1)当元胞数组存放多行字符时,每行字符为一个元胞数组元素,元素之间的分隔可以使逗号、空格、分号。

(2)当用字符串数组存放多行字符时,每个字符串占一个数组行,中间用分号隔开。数组每行字符数必须相等,所以不等的部分需要用空格补齐。例如上面例子中的‘1 234’和‘1 2 3’之内都有空格。由此来看,元胞数组创建多行字符使用起来更为方便,不必考虑字符串的长度问题,所以建议用户采用元胞数组的方式。

(2)允许对标识字体、风格及大小进行设置

要控制图形上的字符样式,必须在被控制字符前,先使用表7-6中的命令和设置值。

表7-6[R.D.2]                    字体样式设置

命    令

举    例

示例命令

效    果

字体名称

\fontname{arg}

'\fontname{ corbel }Example 1'

'\fontname{隶书}范例2'

字体风格

it(斜体1)

sl(斜体2)

'\bfExample 3'

'\itExample 4'

命    令

举    例

示例命令

效    果

字体大小

\fontsize{arg}

默认值为10磅

'\fontsize{14}Example 5'

'\fontsize{6}Example 6'

(1)凡Windows字库中有的字体,都可以通过设置字体名称实现调用。

(2)对中文进行字体选择是允许的。

(3)允许使用上下标

书写上下标的命令见表7-7。

表7-7                           上下标设置

命    令

举    例

示例命令

效    果

任何合法字符

任何合法字符

(4)允许使用希腊字符和其他特殊字符

为标识图形,MATLAB从Tex字符集中摘引入了包括希腊字母在内的100多个特殊字符,其使用见表7-8。

表7-8               图形标识用符号

命    令

字    符

命    令

字    符

命    令

字    符

\diamondsuit

\leftrightarrow

\rightarrow

命    令

字    符

命    令

字    符

命    令

字    符

【例7-11】  图形标识示例。

t=0:pi/50:2*pi;

y=sin(t);plot(t,y);

axis([0,2*pi,-1.2,1.2])

text(pi/2,1.02,'\fontsize{16}\leftarrow\fontname{隶书}在\pi/2\fontname{隶书}处\itsin(t)\fontname{隶书}极大值')

以上代码运行的结果如图7-14所示。

图7-14  标识的设置示例