资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,3.1,二维数据曲线图,3.2,其他二维图形,3.3,三维图形,3.4,图形修饰处理,(,了解,),3.5,图像处理与动画制作,(,了解,),第三节,MATLAB,绘图,3.1,二维数据曲线图,。,(,1,),plot,函数最简单的调用格式是只包含一个输入参数:,plot(x,),在这种情况下,当,x,是实向量时,以该向量元素的下标为横坐标,元素值为纵坐标画出一条连续曲线,这实际上是绘制折线图。,y=4 3 5 6 2;,plot(y),(,2,),plot,函数的基本调用格式为:,plot(x,y,),其中,x,和,y,为长度相同的向量,分别用于存储,x,坐标和,y,坐标数据,例,3-2,绘制曲线。,程序如下:,t=0:0.1:2*pi;,x=t.*sin(3*t);,y=t.*,sin(t,).*,sin(t,);,plot(x,y,r,);,例,3-1,在,0 x2,区间内,绘制曲线,程序如下:,x=0:pi/100:2*pi;,y=2*exp(-0.5*x).*cos(4*pi*x);,plot(x,y,),(,3,),plot(x,y,),其中,x,为向量,,y,为包含几个长度与,x,相等的向量,t=0:0.1:2*pi;,y=,sin(t);sqrt(t,);,plot(t,y,),调用格式为:,plot(x1,y1,x2,y2,xn,yn,),当输入参数都为向量时,,x1,和,y1,,,x2,和,y2,,,,,xn,和,yn,分别组成一组向量对,每一组向量对的长度可以不同。每一向量对可以绘制出一条曲线,这样可以在同一坐标内绘制出多条曲线。,(,4,)含多个输入参数的,plot,函数,t1=0:0.1:2*pi;,y1=sqrt(t1);,t2=0:0.1:4*pi;,y2=sin(t2);,plot(t1,y1,t2,y2);,3,具有两个纵坐标标度的图形,在,MATLAB,中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用,plotyy,绘图函数。,调用格式为:,plotyy(x1,y1,x2,y2),其中,x1,y1,对应一条曲线,,x2,y2,对应另一条曲线。横坐标的标度相同,纵坐标有两个,左纵坐标用于,x1,y1,数据对,右纵坐标用于,x2,y2,数据对。,程序如下:,x=0:pi/100:2*pi;,y1=0.2*exp(-0.5*x).*cos(4*pi*x);,y2=2*exp(-0.5*x).*,cos(pi,*x);,plotyy(x,y1,x,y2);,例,4-4,用不同标度在同一坐标内绘制曲线,y1=0.2e,-0.5x,cos(4x),和,y2=2e,-0.5x,cos(x),。,纵坐标范围默认在最大最小值之间。,4,图形保持,hold on/off,命令控制是保持原有图形还是刷新原有图形,不带参数的,hold,命令在两种状态之间进行切换。,例,4-5,在同一坐标内绘制曲线,y1=0.2e,-0.5x,cos(4x),和,y2=2e,-0.5x,cos(x),。,x=0:pi/100:2*pi;,y1=0.2*exp(-0.5*x).*cos(4*pi*x);,y2=2*exp(-0.5*x).*cos(pi*x);,plot(x,y1),hold on,plot(x,y2),5,图形网格,grid on/off,命令控制是是否显示网格。,例,3-5-2,采用图形网格,绘制曲线,y1=0.2e,-0.5x,cos(4x),程序如下:,x=0:pi/100:2*pi;,y1=0.2*exp(-0.5*x).*cos(4*pi*x);,plot(x,y1),grid on,3.1.3,设置曲线样式,MATLAB,提供了一些绘图选项,用于确定所绘曲线的线型、颜色和数据点标记符号,它们可以组合使用。,当选项省略时,,MATLAB,规定,线型一律用实线,颜色将根据曲线的先后顺序依次。,要设置曲线样式可以在,plot,函数中加绘图选项,其调用格式为:,plot(x1,y1,选项,1,x2,y2,选项,2,xn,yn,选项,n),线型 线方式:,-,实线,:,点线,-.,虚点线,-,波折线。,线型 点方式:,.,圆点,+,加号 *星号,x x,形,o,小圆,s,方形,d,钻石形,v,下三角,上三角,右三角,p,五角星,h,六角星,颜色:,b,蓝,g,绿,r,红,c,青,m,紫,y,黄,k,黑,w,白,x=0:pi/15:2*pi;,y1=,sin(x,);,y2=,cos(x,);,plot(x,y1,b:+,x,y2,g-.*),线,1,:蓝色点线,,关键点用显示,线,2,:绿色虚点线,,关键点用*显示,程序如下:,x=0:2*pi/1000:2*pi;,y1=0.2*exp(-0.5*x).*cos(4*pi*x);,y2=2*exp(-0.5*x).*,cos(pi,*x);,%,查找,y1,与,y2,相等点,(,近似相等,),下标,k=find(abs(y1-y2),gtext(sinx,),加入文字一种更直接的办法:,在图形窗口十字线的交点是字符串的位置,用鼠标点一下就可以将字符串放在那里,axis,函数的调用格式为:,axis(xmin,xmax,ymin,ymax,zmin,zmax,),中分别给出,x,轴和,y,轴的最大值、最小值,axis,函数功能丰富,常用的格式还有:,axis equal,:纵、横坐标轴采用等长刻度。,axis square,:产生正方形坐标系,(,缺省为矩形,),。,axis auto,:使用缺省设置。,axis off,:取消坐标轴。,axis on,:显示坐标轴。,2,坐标控制,程序如下:,t=0:0.01:2*pi;,x=,exp(i,*t);,y=x;2*x;3*x;,plot(y,),grid on;%,加网格线,axis equal%,纵横坐标轴采用等刻度,y,为复数,则以,y,的列的实部和虚部为横纵坐标,例,3-8,在同一坐标中,可以绘制,3,个同心圆,并加坐标控制。,用模型 画一组椭圆,th,=0:pi/50:2*pi;,a=0.5:0.5:4.5;,x=,cos(th,)*a;,y=,sin(th,)*sqrt(25-a.2);,plot(x,y,),axis equal,x,y,为大小相等的矩阵,则以,x,的第,n,列为横坐标,,y,的第,n,列为纵坐标画图,共画,x,的列数个图形,3.1.5,图形的可视化编辑,MATLAB 6.5,版本在图形窗口中提供了可视化的图形编辑工具,利用图形窗口菜单栏或工具栏中的有关,命令可以完成对窗口中各种图形对象的编辑处理。,在图形窗口上有一个菜单栏和工具栏。菜单栏包含,File,、,Edit,、,View,、,Insert,、,Tools,、,Window,和,Help,共,7,个菜单项,工具栏包含,11,个命令按钮。,3.1.6,图形窗口的分割,subplot,函数的调用格式为:,subplot(m,n,p,),该函数将当前图形窗口分成,mn,个绘图区,,即每行,n,个,共,m,行,,区号按行优先编号,,且选定第,p,个区为当前,活动区。在每一个绘图,区允许以不同的坐标系,单独绘制图形。,x=0:2*pi/30:2*pi;,y=,sin(x,);,z=,cos(x,);,u=2*,sin(x,).*,cos(x,);,v=,sin(x)./cos(x,);,subplot(2,2,1),plot(x,y),axis(0 2*pi-1 1),title(sin(x),subplot(2,2,2),plot(x,z),axis(0 2*pi-1 1),title(cos(x),subplot(2,2,3),plot(x,u),axis(0 2*pi-1 1),title(2sin(x)cos(x),subplot(2,2,4),plot(x,v),axis(0 2*pi-20 20),title(sin(x)/cos(x),例,3-10,在图形窗口中,以子图形式同时绘制多根曲线。,bar(x,y,选项,),条形图,stairs(x,y,选项,),阶梯图,stem(x,y,选项,),杆图,fill(x1,y1,选项,1,填充图,x2,y2,选项,2,),注:各颜色选项同,plot,3.2,二维统计分析图,在,MATLAB,中,二维统计分析图形很多,常见的有条形图、阶梯图、杆图和填充图等,所采用的函数分别是:,程序如下:,x=0:pi/10:2*pi;,y=2*,sin(x,);,subplot(2,2,1);bar(x,y,g);,title(bar(x,y,g);axis(0,7,-2,2);,subplot(2,2,2);stairs(x,y,b);,title(stairs(x,y,b);axis(0,7,-2,2);,subplot(2,2,3);stem(x,y,k);,title(stem(x,y,k);axis(0,7,-2,2);,subplot(2,2,4);fill(x,y,y);,title(fill(x,y,y);axis(0,7,-2,2);,例,3.2.1,分别以条形图、阶梯图、,杆图和填充图形式绘制曲线,y=2sin(x),。,例,3.2.2,绘制图形:,(1),某企业全年各季度的产值,(,单位:万元,),分别为:,2347,1827,2043,3025,,试用饼图作统计分析。,(2),绘制复数的相量图:,7+2.9i,、,2-3i,和,-1.5-6i,。,MATLAB,提供的统计分析绘图函数还有很多,例如,用来表示各元素占总和的百分比的饼图、复数的相量图等等。,饼图:,pie(,参数表),向量图:,compass(,参数表),程序如下:,subplot(1,2,1);,pie(2347,1827,2043,3025);,title(,饼图,);,legend(,一季度,二季度,三季度,四季度,);,subplot(1,2,2);,compass(7+2.9i,2-3i,-1.5-6i);,title(,相量图,);,习题:,分析生成右图:,习题:,在一个图形窗口,中分别显示正弦、,余弦、对数、指数,,所需数据自行设计。,3.3,三维图形,3.3.1,三维曲线,函数,plot3,与,plot,函数用法十分相似,其调用格式为:,plot3(x1,y1,z1,选项,1,x2,y2,z2,选项,2,xn,yn,zn,选项,n),1,、每一组,x,y,z,组成一组曲线的坐标参数,选项的定义,和,plot,函数相同。,2,、当,x,y,z,是同维向量时,则,x,y,z,对应元素构成一条三,维曲线。,3,、当,x,y,z,是同维矩阵时,则以,x,y,z,对应列元素绘制三,维曲线,曲线条数等于矩阵列数。,程序如下:,t=0:pi/100:20*pi;,x=,sin(t,);,y=,cos(t,);,z=t.*,sin(t,).*,cos(t,);,plot3(x,y,z);,title(Line,in 3-D Space);,xlabel(X);ylabel(Y);zlabel(Z,);,grid on;,例,3.3.1,绘制三维曲线。,3.3.2,三维曲面,1,产生三维数据,在,MATLAB,中,利用,meshgrid,函数产生平面区域内的网格坐标矩阵。其格式为:,x=a:d1:b;,y=c:d2:d;,X,Y=,meshgrid(x,y,);,语句执行后:,矩阵,X,每一行都是向量,x,,行数等于向量,y,元素的个数,,矩阵,Y,每一列都是向量,y,,列数等于向量,x,元素的个数。,surf,函数和,mesh,函数的调用格式为:,surf(x,y,z,c,),网格填充颜色,mesh(x,y,z,c,),网格不填充,2,绘制三维曲面的函数,一般情况下,,x,y,z,是维数相同的矩阵。,x,y,是网格坐标矩阵,,z,是网格点上的高度矩阵,,c,用于指定在不同高度下的颜色范围。,例,3.3.2,绘制三维曲面图,z=sin(x+sin(y)-x/10,。,程序如下:,x,y,=meshgrid(0:0.25:4*pi);,z=sin(x+sin(y)-x/10;,mesh(x,y,z,);,axis(0 4*pi 0 4*pi-2.5 1);,此外带等高线的三维网格曲面函数,meshc,带底座的三维网格曲面函数,meshz,。,其用法与,mesh,类似,不同的是,meshc,还在,xy,平面上绘制曲面在,z,轴方向的等高线,,meshz,还在,xy,平面上绘制曲面底座。,例,3.3.3,在,xy,平面内选择区域,-8,8-8,8,,绘制,4,种三维,曲面图。程序如下:,x,y,=meshgrid(-8:0.5:8);,z=sin(sqrt(x.2+y.2)./sqrt(x.2+y.2+eps,);,%(,加,eps,是防止出现,0/0),subplot(2,2,1);,mesh(x,y,z,);,title(mesh(x,y,z,),subplot(2,2,2);,meshc(x,y,z,);,title(meshc(x,y,z,),subplot(2,2,3);,meshz(x,y,z,),title(meshz(x,y,z,),subplot(2,2,4);,surf(x,y,z,);,title(surf(x,y,z,),3.3.3,其他三维图形,在介绍二维图形时,曾提到条形图、杆图、饼图和填充图等特殊图形,它们还可以以三维形式出现,使用的函数分别是,bar3,、,stem3,、,pie3,和,fill3,。,bar3,函数绘制三维条形图,常用格式为:,bar3(y)bar3(x,y),stem3,函数绘制离散序列数据的三维杆图,常用格式为:,stem3(z)stem3(x,y,z),pie3,函数绘制三维饼图,常用格式为:,pie3(x),fill3,函数等效于三维函数,fill,,可在三维空间内绘制出填充过的多边形,常用格式为:,fill3(x,y,z,c),(1),绘制魔方阵的三维条形图。,(2),以三维杆图形式绘制曲线,y=2sin(x),。,(3),已知,x=2347,1827,2043,3025,,绘制饼图。,(4),用随机的顶点坐标值画出五个黄色三角形。,例,3.3.4,绘制三维图形,程序如下:,subplot(2,2,1);,bar3(magic(4),subplot(2,2,2);,y=2*sin(0:pi/10:2*pi);,stem3(y);,subplot(2,2,3);,pie3(2347,1827,2043,3025);,subplot(2,2,4);,fill3(rand(3,5),rand(3,5),rand(3,5),y),MATLAB,提供了设置视点的函数,view,,其调用格式为:,view(az,el,),其中,az,为方位角,,el,为仰角,它们均以度为单位。系统缺省的视点定义为方位角,-37.5,仰角,30,。,3.4,图形修饰处理,3.4.1,视点处理,x=0:3*pi/100:3*pi.;,Z=,sin(x,)sin(2*x)sin(2*x);,Y=,zeros(size(x,)ones(size(x)/2,ones(size(x,);,subplot(2,2,1),plot3(x,Y,Z),grid,xlabel,(X-axis),ylabel,(Y-axis),zlabel,(Z-axis),title(Default,Az,=-37.5,E1=30 ),view(-37.5,30),subplot(2,2,2),plot3(x,Y,Z),grid,xlabel,(X-axis ),ylabel,(Y-axis),zlabel,(Z-axis),title(,Az,Rotated to 52.5),view(-37.5+90,30),subplot(2,2,3),plot3(x,Y,Z),grid,xlabel,(X-axis ),ylabel,(Y-axis ),zlabel,(Z-axis ),title(E1 Increased to 60 ),view(-37.5,60),subplot(2,2,4),plot3(x,Y,Z),grid,xlabel,(X-axis),ylabel,(Y-axis ),title(,Az,=0,E1=90 ),view(0,90),3.4.2,色彩处理,1,颜色的向量表示,MATLAB,除用字符表示颜色外,还可以用含有,3,个元素的向量表示颜色。向量元素在,0,1,范围取值,,3,个元素分别表示红、绿、蓝,3,种颜色的相对亮度,称为,RGB,三元组。,有十个,MATLAB,函数产生预定的颜色映象,按缺省,上面所列的各个颜色映象产生一个,643,的矩阵,指定了,64,种颜色,RGB,的描述。这些函数都接受一个参量来指定所产生矩阵的行数。比如,hot(m,),产生一个,m3,的矩阵,它包含的,RGB,颜色值的范围从黑经过红、橘红和黄,到白。,2,颜色使用,色图,(,Colormap,),是,MATLAB,系统引入的概念。色图是,m3,的数值矩阵,它的每一行是,RGB,三元组。语句,colormap(M,)将矩阵,M,作为当前图形窗口所用的颜色映象。色图矩阵可以人为地生成,也可以调用,MATLAB,提供的函数来定义色图矩阵。,例如:,colormap,(,cool,)装入了一个有,64,个输入项的,cool,颜色映象,colormap,default,装入了缺省的颜色映象(,hsv,)。,x,y=meshgrid(-10:0.3:10);,R=sqrt(x.2+y.2);,Z=sin(R)./R;,surf(x,y,Z),colormap(hot),surf(x,y,Z),3,、颜色显示,可以用多种途径来显示一个颜色映象。其中一个方法是观察颜色映象矩阵的元素。,左面的数据显示出第一行是,1/3,红色,而最后一行是白色。,另外,函数,pcolor,可以用来显示一个颜色映象。,n=16;,colormap(hsv(n,),pcolor(1:n+1;1:n+1);,CM=1 0 0;0 1 0;0 0 1;,m=size(CM,1);,colormap(CM,),colormap(cool,)%,调用提供的函数,pcolor(1:m+1;1:m+1),;,colormap(cool,),pcolor(1:8;1:8),3,三维表面图形的着色,三维表面图实际上就是在网格图的每一个网格片上涂上颜色。,surf,函数用缺省的着色方式对网格片着色。除此之外,还可以用,shading,命令来改变着色方式。,shading faceted,命令将每个网格片用其高度对应的颜色进行着色,但网格线仍保留着,其颜色是黑色。这是系统的缺省着色方式。,shading flat,命令将每个网格片用同一个颜色进行着色,且网格线也用相应的颜色,从而使得图形表面显得更加光滑。,shading,interp,命令在网格片内采用颜色插值处理,得出的表面图显得最光滑。,例,3.4.2,种图形着色方式的效果展示。,程序如下:,x,y,z,=sphere(20);%,球面函数,colormap(copper);%copper,古铜调色图,subplot(1,3,1);,surf(x,y,z,);,axis equal,subplot(1,3,2);,surf(x,y,z);shading,flat;,axis equal,subplot(1,3,3);,surf(x,y,z);shading,interp,;,axis equal,3.4.3,光照处理,MATLAB,提供了灯光设置的函数,其调用格式为:,light(Color,选项,1,Style,选项,2,Position,选项,3),例,3.4.3,光照处理后的球面。程序如下:,x,y,z,=sphere(20);,subplot(1,2,1);,surf(x,y,z);axis,equal;,light(Posi,0,1,1);,shading,interp,;,hold on;,plot3(0,1,1,p);text(0,1,1,light);,subplot(1,2,2);,surf(x,y,z);axis,equal;,light(Posi,1,0,1);,shading,interp,;,hold on;,plot3(1,0,1,p);text(1,0,1,light);,3.4.4,图形的裁剪处理,例,3.4.4,绘制三维曲面图,并进行插值着色处理,裁掉图中,x,和,y,都小于,0,部分。,程序如下:,x,y,=meshgrid(-5:0.1:5);,z=,cos(x,).*,cos(y,).*exp(-sqrt(x.2+y.2)/4);,surf(x,y,z);shading,interp,;,pause%,程序暂停,i=,find(x,x,cmap,=,imread(,c,:dog.jpg,);%,读取图像的数据阵和色图阵,imwrite(x,mydog.bmp,);%,将图像保存为真彩色的bmp,x,map,=,imread(mydog.bmp,);,image(x,);,axis image off,%,保持宽高比并取消坐标轴,MATLAB,提供,getframe,、,moviein,和,movie,函数进行动画制作。,3.5.2,动画制作,1,getframe,函数,getframe,函数可截取一幅画面信息,(,称为动画中的一帧,),,一幅画面信息形成一个很大的列向量。,显然,,保存,n,幅图面就需一个大矩阵。,2,moviein,函数,moviein(n,),函数用来建立一个足够大的,n,列矩阵。该矩阵用来保存,n,幅画面的数据,以备播放。之所以要事先建立一个大矩阵,是为了提高程序运行速度。,3,movie,函数,movie(M,n,),函数播放由矩阵,M,所定义画面,n,次,缺省时播放,1,次。,例,3.5.2,绘制了,peaks,函数曲面并且将它绕,z,轴旋转。,程序如下,X,Y,Z=peaks(30);,surf(X,Y,Z,),axis(-3,3,-3,3,-10,10),axis off;,shading,interp,;,colormap(hot,);,m=moviein(20);%,建立一个,20,列大矩阵,for i=1:20,view(-37.5+24*(i-1),30)%,改变视点,m(:,i,)=,getframe,;%,将图形保存到,m,矩阵,end,movie(m,2);%,播放画面,2,次,
展开阅读全文