强大的绘图功能是MATLAB的特点之一。MATLAB可以给出数据的二维、三维乃至四维的图形表现,MATLAB提供了两个层次的绘图操作:一种是对图形句柄进行的低层图形命令,另一种是建立在低层绘图操作之上的高层绘图操作。高层绘图操作简单明了、方便高效,是用户最常用的绘图方法,而低层绘图操作和表现能力更强,为用户更加自主地绘制图形创造了条件。本节只介绍绘制二维和三维图形的高层绘图函数。
一、 二维图形
1. 绘制二维曲线的最基本函数
在MATLAB中,最基本且应用最广泛的绘图函数为plot函数,利用它可以在二维平面上绘制出不同的曲线。
1.1 plot函数的基本用法
plot函数用于绘制x --- y平面上的线性坐标曲线图,因此需要一组x坐标以及与各个x对应 的y坐标。plot函数的基本调用格式为:
plot(x,y)
其中x和y为长度相同的向量,分别用于存储x坐标和y坐标数据。
例1 在区间0≤x≤2π内,绘制曲线.
程序如下:
x=0:pi/100:2*pi;
y=2*exp(-0.5*x).*sin(2*pi*x);
plot(x,y)
执行程序后,打开一个图形窗口,其中绘出了所要求的曲线,如图1。
图1
注意:求y时,指数和正弦函数之间要用点乘运算,而因2为标量,所以2与指数函数之间可以用乘法运算。这样,x和y所包含的元素个数相等,y(i)是x(i)点的函数值。
上面所提到的plot函数的自变量x,y为长度相同的向量,这是最基本的情况,实际应用中还有其他一些变化:
(1)当x,y是同维矩阵时, 则以x,y对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。
(2)当x是向量,y是有一维与x同维的矩阵时,则绘制出多种不同色彩的曲线。曲线条数等于y矩阵的另一维数,x被作为这些曲线共同的横坐标。如:下程序可在同一坐标中绘制出正弦和余弦曲线(见图2)。
例2 x=linspace(1,2*pi,100); %把0到2π等分100份,生成一个行向量
y=[sin(x);cos(x)];
plot(x,y)
图2
(3) plot函数最简单的调用格式是只包含一个输入参数:plot(x)。在这种情况下,当x是实向量时,以该向量元素的下标为横坐标,元素值为纵坐标画出一条连续曲线,这实际上是绘制折线图。当x是实矩阵时,则按列绘制,每列元素值相对其下标的曲线,曲线条数等于x阵的列数。
1.2 含多个输入参数的plot函数
plot函数可以包含若干组向量对,每一向量对可以绘制出一条曲线。含多个输入参数的plot函数调用格式为: plot(x1,y1,x2,y2,…,xn,yn)
其中x1和y1,x2和y2,…,xn和yn分别组成一组向量对,每一组向量对的长度可以不同。每一向量对可以绘制出一条曲线,这样可以在同一坐标内绘制出多条曲线。
1.3 含选项的plot函数
MATLAB提供了一些绘图选项,用于确定所绘曲线的线型、颜色和数据点标记符号。这些选项如表所示,可以组合使用。例如,b_.表示蓝色点划线,y:d表示黄色虚线并用菱形符标记数据点。当选项省略时,MATLAB规定,线型一律用实线,颜色将根据曲线的先后顺序依次采用表给出的前7种颜色。含选项的plot函数调用格式为: plot(x1,y1,选项1,x2,y2, 选项2,…,xn,yn选项n)
线 型 选 项 | 颜色选项 | 标记符号选项 | |||||
线型 | 说明 | 颜色 | 说明 | 标记符号 | 说明 | 标记符号 | 说明 |
- | 实线 | b | 蓝色 | . | 点 | s | 方块符(square) |
: | 虚线 | g | 绿色 | 圆圈 | d | 菱形符(diamond) | |
-. | 点划线 | r | 红色 | 叉号 | 朝下三角符号 | ||
- - | 双划线 | c | 青色 | + | 加号 | 朝上三角符号 | |
|
| m | 品红色 | * | 星号 | < | 朝左三角符号 |
|
| y | 黄色 |
|
| > | 朝右三角符号 |
|
| k | 黑色 |
|
| p | 五角星符(pentagram) |
|
| w | 白色 |
|
| h | 六角星符(hexagram) |
1
表 线型、颜色和标记符号选项
例3 用不同线型和颜色在同一坐标内绘制曲线及其包络线。
程序为:x=(0:pi/100:2*pi)';
%产生一个从0到2π的一维数组,单位增量为π/100
y1=2*exp(-0.5*x)*[1,-1]; %对应于x的包络线的函数值
y2=2*exp(-0.5*x).*sin(2*pi*x); %对应于x的曲线的函数值
x1=(0:12)/2; %产生一个从0到12的一维数组,单位增量为1/2
y3=2*exp(-0.5*x1).*sin(2*pi*x1); %对应于x1的曲线的函数值
plot(x,y1,'g:',x,y2,'b--',x1,y3,'rp')
%以不同的颜色不同线型绘制图形
图3
1.4 双纵坐标函数plotyy
plotyy函数是MATLAB新增的函数。它能把函数值具有不同量纲、不同数量级的两个函数绘制在同一坐标内。调用格式为: plotyy(x1,y1,x2,y2)
其中x1 - y1对应一条曲线,x2 - y2对应另一条曲线。横坐标的标度相同,纵坐标有2个,左纵坐标用于x1 - y1数据对,右纵坐标用于x2 - y2数据对。
例4 用不同标度在同一坐标中绘制曲线和。
程序为: x1=0:pi/100:2*pi;
y1=2*exp(-0.5*x1).*sin(2*pi*x1);
y2=2*sin(x1);
plotyy(x1,y1,x1,y2)
图4
2.绘制图形的辅助操作
绘制完图形后,对图形加一些辅助操作,使图形意义更加明确,是很有必要的。
2.1 图形标注
在绘制图形的同时,可以对图形加上一些说明,如图形名称、坐标轴说明以及图形某一部分的含义等,这些都被称为添加图形标注。有关图形标注函数的调用格式为:
title(图形名称) 用于说明图形名称;
xlabel(x轴说明)、ylabel(y轴说明) (z轴说明用zlabel) 用于说明坐标轴名称;
text(x,y,图形说明) 在(x,y)坐标处添加图形说明;
legend(图例1,图例2,…) 用于绘制曲线所用线型、颜色或数据点图例,图例放置在图形空白处,用户可以通过鼠标移动图例,将其放在所希望的位置。
另外,添加文本说明也可用gtext命令,执行该命令时,十字坐标光标自动跟随鼠标移动,单击鼠标即可将文本放置在十字光标处。除legend函数外,其他函数同样适用于三维图形。
例5 给图3添加图形标注。
程序为: x1=0:pi/100:2*pi;
y1=2*exp(-0.5*x).*sin(2*pi*x);
y1=2*exp(-0.5*x1).*sin(2*pi*x1);
y2=2*sin(x1);
plotyy(x1,y1,x1,y2)
x=(0:pi/100:2*pi)';
y1=2*exp(-0.5*x)*[1,-1];
y2=2*exp(-0.5*x).*sin(2*pi*x);
x1=(0:12)/2;
y3=2*exp(-0.5*x1).*sin(2*pi*x1);
plot(x,y1,'g:',x,y2,'b--',x1,y3,'rp');
title('曲线及其包络线')
text(2.8,0.5,' 包络线');
text(0.5,0.5,' 曲线y');
text(1.4,0.1,' 离散数据点');
legend('包络线','包络线','曲线y','离散数据点')
图5
2.2坐标控制
在绘制图形时,MATLAB可以自动根据要绘制曲线数据的范围选择合适的坐标刻度,使得曲线尽可能清晰地显示出来。所以,在一般情况下用户不必选择坐标轴的刻度范围。但是,如果用户对坐标系不满意,可利用axis函数对其重新设定。该函数的调用格式为:
axis([xmin,xmax,ymin,ymax,zmin,zmax])
如果只给出前4个参数,同MATLAB按照给出的参数选择坐标系范围,以便绘制出合适的二维曲线。如果给出全部参数,则系统按照参数选择坐标系范围,以便绘制出合适的三维图形。
一般情况下,绘图命令每执行一次就刷新当前图形窗口,图形窗口原有图形就不存在了。若希望在已存在的图形上再继续添加新的图形,可使用保持命令hold。hold on/off命令控制是保持原有图形还是刷新原有图形,不带参数的hold命令在两种状态之间进行切换。
给坐标加网格线用grid命令来控制。grid on/off命令控制是画还是不画网格线,不带参数的grid命令在两种状态之间进行切换。
2.3图形窗口的分割
在实际应用中,经常需要在一个图形窗口内绘制若干个独立的图形,这就需要对图形窗口进行分割。分割后的图形窗口由若干个绘图区组成,第一个绘图区可以建立独立的坐标系并绘制图形。同一图形窗口中的不同图形称为子图,MATLAB系统提供了subplot函数,用来将当前窗口分割成若干个绘图区。每一个区域代表一个独立的子图,也是一个独立的坐标系,可以通过subplot函数激活某一区,该区称为活动区,所发出的绘图命令都是作用于活动区域。subplot函数的调用格式为:
subplot(m,n,p)
该函数将当前图形窗口分成m×n个绘图区,即每行n个,共m行,区号按行优先编号,且选定第p个区为当前活动区。在第一个绘图区允许以不同的坐标系单独绘制图形。
例6 在一个图形窗口中以子图形式同时绘制正弦、余弦、正切、余切曲线。
程序为:x=linspace(0,2*pi,50);
y=sin(x);z=cos(x);
t=sin(x)./(cos(x)+eps);ct=cos(x)./(sin(x)+eps);
subplot(2,2,1);
plot(x,y);title('sin(x)');axis([0,2*pi,-1,1]);
subplot(2,2,2);
plot(x,z);title('cos(x)');axis([0,2*pi,-1,1]);
subplot(2,2,3);
plot(x,t);title('tan(x)');axis([0,2*pi,-40,40]);
subplot(2,2,4);
plot(x,ct);title('cot(x)');axis([0,2*pi,-40,40]);
输出结果为:
图6
3.绘制二维图形的其他函数
3.1其他形式的线性直角坐标图
在线性直角坐标系中,其他形式的图形有条形图、阶梯图、杆图和填充图等,所采用的函数分别是: bar(x,y,选项)、stairs(x,y,选项)、stem(x,y,选项)、fill(x1,y1,选项1, x2,y2,选项2,…)
前三个函数用法与plot函数相似,只是没有多输入变量形式。fill函数按向量元素下标渐增次序依次用直线段连接x,y对应元素定义的数据点。假若这样连接所得折线不封闭,那么MATLAB将自动把该折线的首尾连接起来,构成封闭多边形,然后将多边形内部涂满指定的颜色。
例7 分别以条形图、阶梯图、杆图和填充图绘制曲线。
程序为:x=0:0.2:5;
y=2*exp(-1*x);
subplot(2,2,1);bar(x,y,'g');
title('bar(x,y)');axis([0,5,0,2]);
subplot(2,2,2);stairs(x,y,'b');
title('stairs(x,y)');axis([0,5,0,2]);
subplot(2,2,3);stem(x,y,'k');
title('stem(x,y)');axis([0,5,0,2]);
subplot(2,2,4);fill(x,y,'r');
title('fill(x,y)');axis([0,5,0,2]);
输出结果为:
图7
3.2极坐标图
polar函数用来绘制极坐标图,其调用格式为:polar(theta,rho,选项),其中theta为极坐标极角, rho为极坐标矢径,选项内容与plot函数相似。
例8 绘制心形线的极坐标图。
程序为: theta=0:0.02:2*pi;
rho=2*(1+cos(theta));
polar(theta,rho,'r');
输出结果(见图8)。
3.3对数坐标图形
在实际应用中,经常用到对数坐标,例如控制理论中的Bode图。MATLAB提供了绘制对数和半对数坐标曲线的函数,调用格式为:
semilogx(x1,y1,选项1,x2,y2,选项2,…) 半对数坐标,x轴为常用对数刻度,y轴为线性刻度;
semilogy(x1,y1,选项1,x2,y2,选项2,…) 半对数坐标,x轴为线性刻度,y轴为常用对数刻度;
loglog(x1,y1,选项1,x2,y2,选项2,…) 全对数坐标,x,y轴均采用常用对数刻度。
二、 三维图形
1.绘制三维曲线的最基本函数
图8
最基本的三级图形函数为plot3,它将二维绘图函数plot的有关功能扩展到三维空间,用来绘制三维曲线。plot3函数与plot函数用法十分相似,其调用格式为:
plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…, xn,yn,zn,选项n)
其中每一组x,y,z组成一组曲线的坐标参数,选项的定义与函数plot相同。当x,y,z是同维向量时,则x,y,z对应元素构成一条三维曲线。当x,y,z是同维矩阵时,则以x,y,z对应列元素绘制三维曲线,曲线条数等于矩阵列数。
例9 绘制空间曲线:,曲线所对应的参数方程为:。
程序为: t=0:pi/100:2*pi;
x=8*cos(t);y=4*sqrt(2)*sin(t);z=-4*sqrt(2)*sin(t);
plot3(x,y,z,'rp');
title('Line in 3-D Space');text(0,0,0,'origin');
xlabel('X');ylabel('Y');zlabel('Z');
输出结果为:
图 9
2.三维曲面
2.1 平面网格坐标矩阵的生成
绘制所代表的三维曲面图,先要在平面选定一矩形区域,假定区域D=,然后将在方向分成份,将在方向分成份,由各划分点分别作平行于两坐标轴的直线,将区域D分成个小矩形,生成代表每一个小矩形顶点坐标的平面网格坐标矩阵,最后利用有关函数绘图。
产生平面区域内的网格坐标矩阵有两种方法:
● 利用矩阵运算生成,命令如下:
x=a:dx:b;y=c:dy:d;
X=ones(size(y))*x;
Y=y* ones(size(x));
上述语句执行后,矩阵X的每一行都是向量,行数等于向量的元素的个数,矩阵Y的每一行都是向量,列数等于向量的元素的个数。于是X和Y相同位置上的元素恰好是区域D的网格点的坐标。若根据每一个网格点上的坐标求函数值,则得到函数矩阵Z。显然,X,Y,Z各列或各行所对应坐标,对应于一条空间曲线,空间曲线的集合组成空间曲面。
● 利用meshgrid函数生成,命令如下:
x=a:dx:b;y=c:dy:d;
[X,Y]=meshgrid(x,y);
语句执行后,所得到的网格坐标矩阵X,Y与方法(1)得到的相同。当 时,meshgrid函数可写成meshgrid(x)。
例10 已知,求不定方程。
程序如下:
x=10:45;y=6:37;
[x,y]=meshgrid(x,y); % 在[10,45]×[6,37]区域生成网格坐标
z=3*x+5*y;
k=find(z==114); % 求出解的位置
x(k),y(k) %输出对应位置的x,y,即方程的解。
输出结果为: ans =
13 18 23 28
ans =
15 12 9 6
2.2绘制三维曲面的函数
MATLAB提供了mesh函数和surf函数来绘制三维曲面图。mesh函数用于绘制三维网格图,在不需要绘制特别精细的三维曲面图时,可以通过三维网格图来表示三维曲面。surf函数用于绘制三维曲面图,各线条之间的补面用颜色填充。调用格式为:
mesh(x,y,z,c)、surf(x,y,z,c)。
一般情况下,是维数相同的矩阵。是网格坐标矩阵,是网格点上的高度矩阵,用于指定在不同高度下的颜色范围。省略时,MATLAB认为,亦即颜色的设定是正比于图形的高度的,这样就可以得出层次分明的三维图形。当省略时,把矩阵的列下标当作轴坐标,把矩阵的行下标当作轴坐标,然后绘制三维曲面图。当是向量时,必须要求的长度等于矩阵的列,的长度等于矩阵的行,向量元素的组合构成网格点的坐标,坐标则取自矩阵,然后绘制三维曲面图。
例11 用三维曲面图表现函数。
为方便分析各种三维曲面的特征,下面画出3种不同形式的曲面。
程序1: x=-4:4;y=x;[x,y]=meshgrid(x,y);
z=x.^2+y.^2;mesh(x,y,z);
xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');title('mesh');
输出结果见图10。
程序2: x=-4:4;y=x;[x,y]=meshgrid(x,y);
z=x.^2+y.^2;surf(x,y,z);
xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');title('surf');
输出结果见图11。
程序3: x=-4:0.1:4;y=x;[x,y]=meshgrid(x,y);
z=x.^2+y.^2;plot3(x,y,z);
xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');title('plot3-1');grid