1、第 5 章 MATLAB 绘图51 二维图形图形可视化是 MATLAB 的一大特色MATLAB 的基本绘图函数是 plotplot(x,y)形式已知自变量 x 取一组数值 x1、x2、xn,相应的函数 y(x)也取一组数值y(x1)、y(x2)、y(xn),那么,plot(x,y)就用二维图形表示它们之间的函数关系例 1:取步长为 0.1,在0,2区间画出正弦曲线x=0:0.1:2*pi; %在0,2 区间生成一个 1 维数组y=sin(x); %建立正弦函数plot (x, y) %画出 y-x 曲线注意1绘图是在一定的取值范围内进行2当自变量和函数都是向量时,它们的维数必须相同,而且必须同
2、为行向量或同为列向量3plot 生成的图形可以保存为.fig 文件例 2:取步长为 0.5,在0,2区间画出正弦曲线x1=0:0.5:2*pi; %在0, 2区间生成一个 1 维数组y1=sin(x1); %建立正弦函数plot (x1, y1) %画出 y1-x1 曲线注意对区间分割的越细,计算的点就越多,就能真实逼近函数的连续变化,但是计算时间就越长如果自变量的采样点不够多,就可能没有真实反映原函数例 3:关闭图形窗口,分别将例 1 和例 2 中最后的语句改为figure, plot (x, y) %画出 y-x 曲线figure, plot (x1, y1) %画出 y1-x1 曲线注意
3、figure 可以.生成独立的图形窗口例 4:绘制 y=sin(tgx)- tg (sinx)在 x-区间内的曲线先以 0.05 为步长构造 x 向量x=-pi:0.05:pi;y=sin(tan(x)- tan(sin(x);figure ,plot(x,y)在 x-和 x两个子区间内的曲线比较粗糙在这两个子区间增加取样点x=-pi:0.05:-1.8,-1.801:0.001:-1.2,-1.195:0.05:1.2, 1.201:0.001:1.8,1.81:0.05:pi;y=sin(tan(x)- tan(sin(x);figure ,plot(x,y)例 5:绘制饱和非线性特性曲线
4、 ,取 x-区间,步1.,1.xxsigny长为 0.02。符号函数 01xsignx=-2:0.02:2;y=1.1* sign(x).*(abs(x)1.1)+x.*(abs(x)=1.1)+x.*(abs(x) 朝右三角符 x 叉字符v 朝下三角符例 1:取步长为 0.1,在0,2区间画出正弦曲线x=0:0.1:2*pi; %在0,2 区间生成一个 1 维数组y=sin(x); %建立正弦函数plot (x, y,-.rd) %画出 y-x 曲线注意,s 中色彩、线型和数据点型符号对次序不敏感实际上,这些设置可以在.fig 文件中,通过“edit”菜单“Current Object Pr
5、operties”(或点击“edit plot” 工具,点击曲线)“line style” 、 “line color”、“style”修改在 plot(x,y)函数形式中,x 和 y 可以是向量,也可以是矩阵。当 x 和 y 是矩阵时,它们必须同维同阶。这时将得到多条曲线其中一条曲线表示 y 的第 1 列向量是 x 第 1 列向量的函数关系、另一条曲线表示 y 的第 2 列向量是 x 第 2 列向量的函数关系等等曲线的条数等于矩阵的列数例 6:在同一坐标中同时绘制正弦和余弦两条曲线t= linspace(0,2*pi,100); x=linspace(a,b,n),a 和 b 分别是数组的第
6、 1 个和最后一个元素, n 是采样总点数(包括 a 和 b) ,步长 (b-a)/(n-1)x=t; t; y=sin(t); cos(t); plot(x,y)问题:如果不转置,会出现什么问题?plot(x)形式当 x 为向量时,plot(x)以向量元素的下标为横坐标、以向量元素的值为纵坐标画图例 7 分别取步长为 1 和 0.1,在0,2 区间生成向量,并用 plot(x)画图,注意横坐标x=0:2*pi, x1=0:0.1:2*pi;figure, plot(x), figure, plot(x1)当 x 为复数向量时,plot(x)相当于 plot(real(x),imag(x)例
7、8 t=0:0.01:2*pi; X=exp(i*t); plot(X)当 x 为实矩阵时,plot(x)按照列绘制每列元素值相对其下标的函数曲线。曲线的条数等于矩阵的列数例 9 t=0:0.01:2*pi; x=sin(t);y=cos(t);z=sin(2*t);A=x,y,z; %生成列数为 3 的数组size(A), % 给出 A 的维数及大小plot(A) %观察曲线的数目是否与列数相同当 x 为复数矩阵时,则按列分别以元素的实部为横坐标、虚部为纵坐标绘制多条曲线。曲线的条数等于矩阵的列数例 9 用复数矩阵形式画 Lissajous 图形。 (在模拟信号时代, Lissajous 图
8、形常用来测量信号的频率。 )t=linspace(0,2*pi,80); % (80x1)的矩阵X=cos(t),cos(2*t),cos(3*t)+i*sin(t)*1,1,1; %(80x3)的复数矩阵plot(X)plot(x1,y1,x2,y2,xn,yn)形式当 x1,y1,x2,y2,xn,yn 为向量时,x1 和 y1、x2 和 y2、xn 和 yn 分别组成向量对。每一组向量的长度可以不同。每一组向量可以绘制一条曲线,这样可以绘制多条曲线。例 9 用不同线型和颜色在同一坐标内绘制曲线 y=2e-0.5xsin(2x)及其包络线x=(0:pi/100:2*pi); y1=2*ex
9、p(-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); %其值为 0plot(x,y1,k:,x,y2,b-,x1,y3,rp);双纵坐标函数 plotyy同时绘制具有不同纵坐标刻度的两个图形plotyy(x1,y1,x2,y2)x1,y1 对应一条曲线,x2,y2 对应另一条曲线,它们的横坐标刻度相同。纵坐标分左右两个,左边用于 x1,y1,右边用于 x2,y2例 10 用不同刻度在同一坐标内绘制曲线 y1=2e-0.5xsin(2x)及其包络线x1=0:pi/100
10、:2*pi;x2=0:pi/100:3*pi;y1= exp(-0.5*x1).*sin(2*pi*x1);y2= 1.5*exp(-0.1*x2).*sin(x2);plotyy(x1,y1,x2,y2);注意,这时不能像 plot 函数那样对曲线属性进行设置,如果要设置曲线的色彩、线型和数据点型符号,应使用句柄图形控制来完成图形标识坐标轴控制函数 axis基本形式:axis(xmin,xmax,ymin,ymax)例 11 用图形表示连续调制波形 及其包络线。)9sin(tyt=(0:pi/100:pi);y1=sin(t)*1,-1;y2=sin(t).*sin(9*t); t3=pi*
11、(0:9)/9;y3=sin(t3).*sin(9*t3);figure, plot(t,y1,t,y2,t3,y3,mo)然后再把最后的语句改成figure, plot(t,y1,t,y2,t3,y3,mo); axis(0,pi,-0.8,0.8) 观察区别图形名称:title基本形式:title(S)S 可以取字符串。字符串是与数值不同的一种数据类型,它用单引号对括起来例 12 将上个语句改为figure, plot(t,y1,t,y2,t3,y3,mo);title(连续调制波形)坐标轴名称:xlabel、ylabel基本形式:xlabel(S)、ylabel(S)例 12 将上个语句
12、改为figure, plot(t,y1,t,y2,t3,y3,mo); axis(0,pi,-1,1);title(连续调制波形); xlabel(x坐标), ylabel(y 坐标)曲线图例:legend用于区分各条曲线基本形式:legend(S1,S2)S1,S2分别对应按先后次序生成的曲线例 12 将上个语句改为figure, plot(t,y1,t,y2,t3,y3,mo); axis(0,pi,-1,1);title(连续调制波形); xlabel(x坐标), ylabel(y 坐标);legend(包络线 1,包络线 2,调制波,零点)坐标注释:text基本形式:text(xt,y
13、t,S)表示在(xt,yt)坐标处书写字符注释例 12 将上个语句改为figure, plot(t,y1,t,y2,t3,y3,mo); axis(0,pi,-1,1);title(连续调制波形); xlabel(x坐标), ylabel(y 坐标);legend(包络线 1,包络线 2,调制波,零点);text(17*pi/100, sin(17*pi/100), y=sin(t),text(67*pi/100, sin(67*pi/100).*sin(9*67*pi/100), y=sin(t)*sin(2t)分格线:gridgrid on,画出分格线grid off,不画出分格线grid
14、:在以上两个命令之间切换例 1:取步长为 0.1,在0,2区间画出正弦曲线,画出分格线x=0:0.1:2*pi; %在0,2 区间生成一个 1 维数组y=sin(x); %建立正弦函数plot (x, y) %画出 y-x 曲线grid on继续输入下面命令,观察图形窗口的变化grid offgridgrid图形保持:hold例 1 在上例中,继续画出余弦曲线,观察图形变化y1=cos(x); %建立余弦函数plot (x, y1) %画出 y1-x 曲线为了保持以存在的图形,应采用 hold 函数hold on,启动图形保持功能hold off,关闭图形保持功能hold,在以上两个命令之间切
15、换例 2 在上例中,启动图形保持功能,观察图形变化plot (x, y) %画出 y-x 曲线hold onplot (x, y1) %画出 y1-x 曲线继续输入下面命令,观察图形窗口的变化hold offplot (x, y1) %画出 y1-x 曲线holdplot (x, y) %画出 y-x 曲线子图:subplopt在绘图过程中,经常需要将几个图形画在同一个窗口中。这些单个的图形称为子图。调用格式:subplot(m,n,p)它把一个图形窗口分割成 mn 个子绘图区,p 表示子绘图区的编号,编号次序按行从左至右(这与数组和矩阵的编号不同)例 1 在 4 个子图中绘制不同的三角函数图
16、x=0:0.1*pi:2*pi;subplot(2,2,1); plot(x,sin(x),-*); title(sin(x);subplot(2,2,2); plot(x,cos(x),-o); title(cos(x); axis(0,2*pi,-1.5,1.5);subplot(2,2,3); plot(x,sin(x).*cos(x),-x); title(sin(x).*cos(x); xlabel(x 轴);subplot(2,2,4); plot(x,sin(x)+ cos(x),-h); title(sin(x)+ cos(x); grid on;注意,axis、hold、ti
17、tle 、 xlabel、ylabel、grid 等函数是针对子图操作的二维特殊函数图在直角坐标系主要有条形图(bar)、阶梯图 (stairs)、火柴杆图(stem) 、填充图 (fill)例 1 在 4 个子图中绘制正弦函数的条形图、阶梯图、火柴杆图、填充图t=0:.2:2*pi; %“0.2”可以写成 “.2”y=sin(t);subplot(2,2,1), stairs(t,y);subplot(2,2,2);stem(t,y);subplot(2,2,3);bar(t,y); axis(0,2*pi,-1,1);subplot(2,2,4);fill(t,y,r); %必须有颜色参数
18、r极坐标图:polar基本形式:polar(theta,rho)或 polar(theta,rho,s)theta 为极角, rho 为矢径,s 为图形设置选项例 1 绘制=sin(2 )cos(2)的极坐标图theta=0:0.01:2*pi; rho= sin(2*theta).*cos(2*theta);polar(theta,rho,k)$第 5 周$对数坐标图:loglogx、y 轴均采用为常用对数刻度半对数坐标图:semilogxx 轴采用常用对数刻度,y 轴保持线性刻度半对数坐标图:semilogyy 轴采用常用对数刻度,x 轴保持线性刻度例 1 绘制 y=10x2 的对数坐标图
19、,并与直角线性坐标图进行比较x=0:0.1:10; y=10*x.*x;subplot(2,2,1),plot(x,y);title(plot(x,y);grid on;subplot(2,2,2); semilogx (x,y); title(semilogx (x,y);grid on;subplot(2,2,3); semilogy(x,y); title(semilogy(x,y);grid on;subplot(2,2,4); loglog (x,y); title( loglog (x,y);grid on;饼状图:pie用来表示各元素占总和的百分比pie(X)pie(X,expl
20、ode)X 为一向量,一个饼图的某一部分对应向量 X 的某一个元素。explode 有“特别引人注目”的意思,它是与 X 同长度的向量,它的元素取 1 或 0。当某个元素取 1 时,与 X 对应的区域就突出例 1 某次考试,优秀、良好、中等、及格、不及格的人数分别为7、17、23、19、5,用饼图进行统计分析X=7,17,23,19,5;figure,pie(X);title(饼图); legend(优秀, 良好, 中等, 及格, 不及格);explode=1,0,1,0,0;figure,pie(X,explode);隐函数绘制隐函数就是满足方程 f(x,y)=0 的 x 和 y 之间的关系
21、式。当 x 和 y 之间的关系不能用显式表达时,就无法定义一个 x 向量,也就无法求出相应的 y 向量。从而不能用 plot(x,y)绘制曲线。ezplot 可以直接绘制隐函数曲线调用格式:ezplot( 隐函数表达式 )例 1 绘制隐函数 f(x,y)=x2sin(x+y2)+y2ex+y+5cos(x2+y)=0 的曲线ezplot(x2.*sin(x+y2)+y2.*exp(x+y)+5*cos(x2+y)这是一个多值函数。曲线的 x 取值范围(-6,6)由系统自动选取。可以通过下面方式改变定义域ezplot(x2.*sin(x+y2)+y2.*exp(x+y)+5*cos(x2+y),
22、-10,10)52 三维图形三维曲线三维曲线的基本绘图函数是 plot3调用格式:plot3(x,y,z)x,y,z 为 3 个维数相同的 向量 。plot3(x,y,z) 画出这些向量所表示的曲线。plot3(X,Y,Z)X,Y,Z 为 3 个阶数相同的矩阵。plot3(X,Y,Z) 这 3 个矩阵的列向量所表示的曲线plot3(X,Y,Z,s)s 为线型、颜色、数据点型等字符串plot3(x1,y1,z1,s1, x2,y2,z2,s2.)组合绘图格式plot3 函数实际上是 plot 函数的 3 维扩展。与 plot 相比,只是增加了一个维数,其它都相同。例 1 绘制 y=sin(x),
23、z=cos(x) 的曲线x=0:pi/50:10*pi; y=sin(x); z=cos(x);plot3(x,y,z);例 2 绘制 x=8cost,y=4 sint,z=-4 sint,( )的曲线2220tt=0:pi/50:2*pi;x=8*cos(t); y=4*sqrt(2)*sin(t); z=-4*sqrt(2)*sin(t);plot3(x,y,z, p);title(Line in 3-D Space); text(0,0,0, oringin);xlabel(x); ylabel(y); zlabel(z);grid on;三维曲面函数 z=f(x,y)表示 3 维曲面在
24、 matlab 中,z=f(x,y)不可能连续地取值因此,所谓的曲面是由密集间隔的离散点构成。或者说,曲面是由密集的间隔曲线构成,而曲线又是由一长串离散点构成绘制这样的曲面,需要做下面的工作1确定自变量 x、y 的取值范围和取值间隔在 xy 平面选曲面 z=f(x,y)的定义域 D,设 x 的取值范围为a,b ,取值间隔为 dx;y 的取值范围为c,d ,取值间隔为 dyx=a:dx:b,y=c:dy:d这样将 x 的区间a,b分成 m 份,将 y 的区间c,d分成 n 份这样将曲面 z=f(x,y)的定义域 D 分成 mn 个小矩形。( a , c ) ( x 2 , c ) ( x 3 ,
25、 c ) ( b , c )( a , y 2 )( a , y 3 )( a , d )n 个m 个这些小矩形顶点的坐标就是 z=f(x,y)的取值点利用这些小矩形顶点的坐标可以构成平面网格坐标矩阵生成平面网格坐标矩阵的方法有两种2a利用矩阵运算生成x=a:dx:b, (生成 1m 矩阵 );y=(c:dy:d) (生成 n1 矩阵)x = a : d x : ba x 2 x 3 bm 列y = ( c : d y : d ) c y 2 y 3.dn 行X=ones(size(y)*x (生成 nm 矩阵); Y=y*ones(size(x) (生成 nm 矩阵)X = o n e s
26、( s i z e ( y ) ) * x1 1 1.1n 行a x 2 x 3 bm 列a x 2 x 3 ba x 2 x 3 b.a x 2 x 3 bm 列n 行Y = y * o n e s ( s i z e ( x ) )c y 2 y 3.dn 行m 列1 1 1 1c c c cy 2 y 2 y 2 y 2y 3 y 3 y 3 y 3.d d d dm 列n 行这里,矩阵 X 的每一行都是向量 x,行数等于向量 y 的元素个数矩阵 Y 的每一列都是向量 y,列数等于向量 x 的元素个数在 X 和 Y 相同位置上的元素(X(i,j), Y(i,j)就是网格点的坐标(xj,y
27、i)根据网格点的坐标,由 z=f(x,y)得到 z 值,从而得到函数值矩阵 ZX、Y、Z 各行或各列所对应的坐标,对应于空间一条曲线;X、Y 、Z 所有行或所有列形成的空间曲线的集合就组成了空间曲面2b利用 meshgrid 函数生成x=a:dx:b,y=c:dy:dX,Y=meshgrid(x,y)利用这种方法得到的网格坐标矩阵 X、Y 与第 1 种方法得到的相同当 x 和 y 的取值范围及取值间隔相同时,meshgrid 函数可以写成X,Y=meshgrid(x)3 维曲面函数mesh(X,Y,Z,C) C 是指定各点用色的矩阵。mesh 用于绘制 3 维网格图surf(X,Y,Z,C)用
28、于绘制 3 维曲面图例 2 用 3 维曲面表现函数 z=sinycosx1用 mesh 函数画x=0:0.1:2*pi;X,Y=meshgrid(x);Z=sin(Y).*cos(X);figure,mesh(X,Y,Z);xlabel(x-axis), ylabel(y-axis), zlabel(z-axis);title(mesh);2用 surf 函数画x=0:0.1:2*pi;X,Y=meshgrid(x);Z=sin(Y).*cos(X);figure,surf(X,Y,Z);xlabel(x-axis), ylabel(y-axis), zlabel(z-axis);title(
29、surf);3用 plot3 函数画x=0:0.1:2*pi;X,Y=meshgrid(x);Z=sin(Y).*cos(X);figure,plot3(X,Y,Z);xlabel(x-axis), ylabel(y-axis), zlabel(z-axis);title(plot3);注意在 mesh(X,Y,Z,S)和 surf(X,Y,Z,S)的函数中,一般情况下,X 、Y 、Z 是维数相同的矩阵。 ,X、Y 是网格坐标矩阵,Z 是网格点上高度矩阵,C 是指定各点用色的矩阵。当 C 缺省时,CZ。这时,颜色的设定正比于图形的高度,这样可以得到层次分明的 3 维图形。在网格图(mesh)中
30、,线条有颜色,线条间的补面无颜色在曲面图(surf)中,线条和线条间的补面都有颜色用 plot3 绘制的 3 维曲面实际上是由 3 维曲线组合而成。与 mesh 函数相似的函数还有 meshc 和 meshzmeshc:带等高线的 3 维网络曲面函数。除具有 mesh 函数的功能外,还在 xy 平面上绘制曲面在 z 轴方向的等高线meshz:带底座的 3 维网络曲面函数。除具有 mesh 函数的功能外,还在 xy 平面上绘制曲面的底座与 surf 函数相似的函数还有 surfc 和 surflsurfc:带等高线的曲面函数surfl:具有光照效果的曲面函数例 3 在 xy 平面内选择区域-8,
31、8 -8,8,绘制函数 的上述 4 种2sinyxz3 维曲面图x=-8:0.5:8;X,Y=meshgrid(x);Z=sin(sqrt(X.2+Y.2)./ sqrt(X.2+Y.2+eps); %为什么加 eps?eps 是机器零阈值( 机器的浮点运算误差限 )figure;meshc(X,Y,Z);title( meshc(X,Y,Z)figure;meshz(X,Y,Z);title( meshz(X,Y,Z)figure;surfc(X,Y,Z);title(surfc(X,Y,Z)figure;surfl(X,Y,Z);title(surfl(X,Y,Z)三维特殊函数图在直角坐标
32、系三维特殊函数图主要有条形图(bar3) 、火柴杆图(stem3)、填充图(fill3)、饼图(pie3)例 4 绘制上述函数的条形图、填充图、火柴杆图figure;bar3(Z);title( bar3(Z)figure; fill3(X,Y,Z, r); %注意,输入参数与其它函数有区别figure; stem3(Z);title( bar3(Z)例 5 绘制参数方程 , , 的 3 维曲线tetx3sintety3cos2tz及其火柴杆图t=0:.1:2*pi; x=t.3.*sin(3*t).*exp(-t); y=t.3.*cos(3*t).*exp(-t); z=t.2;figur
33、e,plot3(x,y,z),gridfigure,stem3(x,y,z);hold on; plot3(x,y,z),grid例 6 某次考试,优秀、良好、中等、及格、不及格的人数分别为7、17、23、19、5,用饼图进行统计分析X=7,17,23,19,5;figure,pie3(X);title(饼图); legend(优秀, 良好, 中等, 及格, 不及格);注意在 3 维饼图中,legend 的颜色并没有一一对应explode=1,0,1,0,0;figure,pie3(X,explode);在 MATLAB 中,对于连续函数,在图形上实际上是用一组离散的点表示。为了显示出函数的连续性,采用两种处理方法1对区间进行更细的分割,计算更多的点,来近似表示函数的连续性2把两点用直线连接起来,来近似表示函数的连续性在缺省情况下,曲线一律用“实线”线型注:gkngkw64