MATLAB计算的图形绘制.ppt
第四讲 MATLAB的图形绘制,作为一个功能强大的工具软件,Matlab具有很强的图形处理功能,提供了大量的二维、三维图形函数。由于系统采用面向对象的技术和丰富的矩阵运算,所以在图形处理方面既方便又高效。,一、二维曲线的绘制,(一)基本图形函数(二)图形的修饰(三)图形的比较显示,常用格式:plot(x)%绘制以x为纵坐标的二维曲线plot(x,y)%绘制以x为横坐标,y为纵坐标的二维曲线plot(x1,y1,x2,y2,)%绘制多条曲线,不同的矩阵对之间,其维数可以不同 说明:x和y可以是向量或矩阵。,一、二维曲线的绘制,(一)基本图形函数,【例1】:x1=1 4 3;plot(x1),(一)基本图形函数,注:当x是实向量时,以该向量的序号为横坐标,元素值为纵坐标画出一条连续曲线,这实际上是绘制折线图。,一、二维曲线的绘制,x2=3 5 7 6;12 24 15 14;3 6 9 7;plot(x2),(一)基本图形函数,注:当x是实矩阵时,则以其序号为横坐标,按列绘制每列元素值相对于其序号的曲线。,一、二维曲线的绘制,x3=1 2 3;y3=1 2 3;4 3 6;plot(x3,y3),(一)基本图形函数,注:当x是向量,y是有一维与x同维的矩阵时,则绘制出多根不同颜色的曲线。曲线条数等于y矩阵的另一维数,x被作为这些曲线共同的横坐标。,一、二维曲线的绘制,x3=1 2 3;y3=1 2 3;4 3 6;7 8 9;plot(x3,y3),(一)基本图形函数,一、二维曲线的绘制,x4=3 5 7 6;12 24 15 14;3 6 9 7;y4=1 3 4 2;6 8 7 5;5 4 3 9;plot(x4,y4),(一)基本图形函数,注:如果x和y都是矩阵,则大小必须相同,矩阵x的每列和y的每列画一条曲线。,一、二维曲线的绘制,x=0:pi/10:2*pi;y1=sin(x);y2=cos(x);plot(x,y1,x,y2),(一)基本图形函数,一、二维曲线的绘制,plot(x,y1,r+-,x,y2,k*:)%多种颜色或线型来区分不同的数据组,(一)基本图形函数,一、二维曲线的绘制,1图形标注有关图形标注函数的调用格式为:title(s)%书写图名xlabel(s)%横坐标轴名 ylabel(s)%纵坐标轴名 text(xt,yt,s)%在图形的(xt,yt)坐标处书写文字注释 legend(s,pos)%在指定位置建立图例,(二)图形修饰,一、二维曲线的绘制,函数中的说明文字,除使用标准的ASCII字符外,还可使用LaTeX格式的控制字符,这样就可以在图形上添加希腊字母、数学符号及公式等内容。例如,text(0.3,0.5,sin(omegat+beta)将得到标注效果sin(t+)。,(二)图形修饰,一、二维曲线的绘制,2坐标控制axis函数的调用格式为:axis(xmin xmax ymin ymax zmin zmax)axis函数功能丰富,常用的格式还有:axis equal:纵、横坐标轴采用等长刻度。axis square:产生正方形坐标系(缺省为矩形)。axis auto:使用缺省设置。axis off:取消坐标轴。axis on:显示坐标轴。,(二)图形修饰,一、二维曲线的绘制,3.分格线使用grid命令显示分格线。格式:grid on%显示分格线 grid off%不显示分格线 grid%在以上两个命令间切换说明:不显示分格线是MATLAB的默认设置。分格线的疏密取决于坐标刻度,如果要改变分格线的疏密,必须先定义坐标刻度。,(二)图形修饰,一、二维曲线的绘制,【例2】:x=0:pi/10:2*pi;y1=sin(x);y2=cos(x);plot(x,y1,x,y2)grid on,(二)图形修饰,一、二维曲线的绘制,xlabel(Independent Variable X)ylabel(Dependent Variable Y)title(Sine and Cosine Curve)gtext(sin(x),(二)图形修饰,gtext(s)-用鼠标把字符串放到图形上,一、二维曲线的绘制,text(1.5,0.3,cos(x)axis(0 2*pi-0.8 0.8),(二)图形修饰,一、二维曲线的绘制,legend(sin(x),cos(x),4),(二)图形修饰,一、二维曲线的绘制,1同一窗口多次叠绘格式:hold on%使当前坐标系和图形保留 hold off%使当前坐标系和图形不保留 hold%在以上两个命令中切换说明:在设置了“hold on”后,如果画多个图形对象,则在生成新的图形时保留当前坐标系中已存在的图形对象,MATLAB会根据新图形的大小,重新改变坐标系的比例。,(三)图形的比较显示,一、二维曲线的绘制,【例3】:在同一窗口画出函数sinx在区间0 2的曲线和cosx在区间-的曲线。x1=0:0.1:2*pi;plot(x1,sin(x1),(三)图形的比较显示,一、二维曲线的绘制,hold onx2=-pi:0.1:pi;plot(x2,cos(x2),(三)图形的比较显示,注:坐标系的范围由02转变为-2。,一、二维曲线的绘制,2.同一窗口多个子图如果需要在同一个图形窗口中布置几幅独立的子图,可以在plot命令前加上subplot命令来将一个图形窗口划分为多个区域,每个区域一幅子图。格式:subplot(m,n,k)%使(mn)幅子图中的第k幅成为当前图clf%清除子图!说明:子图的序号编排原则是:左上方为第1幅,先向右后向下依次排列,子图彼此之间独立。,(三)图形的比较显示,一、二维曲线的绘制,【例4】:在多个窗口中绘制图形。x=0:0.1:2*pi;subplot(2,2,1)%将图形窗口分割为2行2列,第1行第1列(左上方)为当前图 plot(x,sin(x),(三)图形的比较显示,一、二维曲线的绘制,subplot(2,2,2)%右上方为当前图 plot(x,cos(x),(三)图形的比较显示,一、二维曲线的绘制,y3=exp(x);subplot(2,2,3)%左下方为当前图plot(x,y3),(三)图形的比较显示,一、二维曲线的绘制,subplot(224)%右下方为当前图,省略逗号 plot(x,log(3*x),(三)图形的比较显示,一、二维曲线的绘制,3.双纵坐标图格式:plotyy(x1,y1,x2,y2)%以左、右不同纵轴绘制两条曲线说明:左纵轴用于(x1,y1)数据,右纵轴用于(x2,y2)数据来绘制两条曲线。坐标轴的范围、刻度都自动产生。,(三)图形的比较显示,一、二维曲线的绘制,【例5】: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),(三)图形的比较显示,一、二维曲线的绘制,一、二维曲线的绘制,(三)图形的比较显示,格式:plot3(x,y,z,s)%绘制三维曲线 plot3(x1,y1,z1,s1,x2,y2,z2,s2,)%绘制多条三维曲线说明:当x、y、z是同维向量时,则绘制以x、y、z元素为坐标的三维曲线;当x、y、z是同维矩阵时,则绘制三维曲线的条数等于矩阵的列数。s是指定线型、色彩、数据点形的字符串。,二、MATLAB的三维图形绘制,(一)三维曲线图,【例6】:绘制方程 在的图像。t=0:pi/10:2*pi;x=sin(t);y=cos(t);z=t;plot3(x,y,z,m:p),二、MATLAB的三维图形绘制,(一)三维曲线图,二、MATLAB的三维图形绘制,(一)三维曲线图,grid on xlabel(Dependent Variable X)ylabel(Dependent Variable Y)zlabel(Independent Variable Z)title(Sine and Cosine Curve),二、MATLAB的三维图形绘制,(一)三维曲线图,二、MATLAB的三维图形绘制,(一)三维曲线图,(二)三维网线图和曲面图,1.meshgrid命令为了绘制三维立体图形,MATLAB的方法是将x方向划分为m份,将y方向划分为n份,meshgrid命令是以x、y向量为基准,来产生在x-y平面的各栅格点坐标值的矩阵。格式:X,Ymeshgrid(x,y)说明:X、Y是栅格点的坐标,为矩阵;x、y为向量。,二、MATLAB的三维图形绘制,(二)三维网线图和曲面图,2.三维网线图mesh函数为数据点绘制网格线,图形中的每一个已知点和其附近的点用直线连接。格式:mesh(z)%画三维网线图 mesh(x,y,z,c)说明:只有参数z时,以z矩阵的行下标作为x坐标轴,把z的列下标当作y坐标轴;x、y分别为x、y坐标轴的自变量;当有x、y、z参数时,c是指定各点的用色矩阵,当c省略时默认用色矩阵是z的数据。如果x、y、z、c四个参数都有,则应该都是维数相同的矩阵。,二、MATLAB的三维图形绘制,3.三维曲面图surf函数和mesh的用法类似,但它可以画出着色表面图,图形中的每一个已知点与其相邻点以平面连接。格式:surf(z)%画三维曲面图 surf(x,y,z,c)说明:参数设置与mesh命令相同,c可以省略。,(二)三维网线图和曲面图,二、MATLAB的三维图形绘制,【例7】:分别用mesh和surf函数绘制高斯矩阵的曲面。z=peaks(40);mesh(z)surf(z),z=3*(1-x).2.*exp(-(x.2)-(y+1).2).-10*(x/5-x.3-y.5).*exp(-x.2-y.2).-1/3*exp(-(x+1).2-y.2);,(二)三维网线图和曲面图,二、MATLAB的三维图形绘制,一、二维曲线的绘制,(二)三维网线图和曲面图,一、二维曲线的绘制,(二)三维网线图和曲面图,【例8】:绘制方程x=-7.5:0.5:7.5;y=x;X,Y=meshgrid(x,y);R=sqrt(X.2+Y.2)+eps;Z=sin(R)./R;surf(X,Y,Z),(二)三维网线图和曲面图,二、MATLAB的三维图形绘制,一、二维曲线的绘制,(二)三维网线图和曲面图,4.其它立体网线图和曲面图meshc:为立体网状图加等高线;Meshz:为立体网状图加“围裙”。,(二)三维网线图和曲面图,二、MATLAB的三维图形绘制,一、二维曲线的绘制,(二)三维网线图和曲面图,一、二维曲线的绘制,(二)三维网线图和曲面图,5改变视角格式:view(az,el)%通过方位角和俯仰角改变视角view(vx,vy,vz)%通过直角坐标改变视角说明:az(方位角)是观察点和坐标原点连线在x-y平面内的投影和y轴负方向的夹角;el(俯仰角)是观察点与坐标原点的连线和x-y平面的夹角。对于这两个角度,三维图形的默认值分别为-37.5和30,二维图形的默认值是0和90。,(二)三维网线图和曲面图,二、MATLAB的三维图形绘制,【例9】:z=peaks(40);subplot(2,2,1)mesh(z)subplot(2,2,2);mesh(z)view(-37.5,-30),subplot(2,2,3);mesh(z)view(180,0)subplot(2,2,4);mesh(z)view(0,90),(二)三维网线图和曲面图,二、MATLAB的三维图形绘制,一、二维曲线的绘制,(二)三维网线图和曲面图,(一)条形图,条形图常用于对统计的数据进行作图,特别适用于少量且离散的数据。语法:bar(x,y,width,参数)%画条形图bar3(y,z,width,参数)%画三维条形图说明:x是横坐标向量,省略时默认值是1:m,m为y的向量长度;y是纵坐标,可以是向量或矩阵,width是竖条的宽度,参数有grouped(分组式)和stacked(累加式)。,三、其他图形函数,(一)条形图,【例10】:用条形图表示某年一月份中3日6日连续四天的温度数据,y矩阵的各列分别表示平均温度、最高温度和最低温度。x=3:6;y=5.3000 13.0000 0.40005.1000 11.8000-1.70003.7000 8.1000 0.60001.5000 7.7000-4.5000;bar(x,y)bar3(x,y)bar(x,y,0.5,stack),三、其他图形函数,(一)条形图,三、其他图形函数,(一)条形图,三、其他图形函数,(一)条形图,三、其他图形函数,(二)面积图和实心图,1、面积图函数area用来绘制面积图,是在plot的基础上填充曲线与横轴之间的面积,该图用于查看某个数在该列所有数的总和中所占的比例,只能用于二维绘图。格式:area(y)%画面积图area(x,y),三、其他图形函数,(二)面积图和实心图,2.实心图函数fill用来绘制实心图,实心图是将数据的起点和终点连成多边形,并填充颜色。格式:fill(x,y,c)%画实心图说明:c为实心图的颜色,可以用r、g、b、c、m、y、w、k,或RGB三元组行向量表示。,三、其他图形函数,(二)面积图和实心图,【例11】:x=1:7;y=3,2,5;6,1,8;7,4,9;6,3,7;8,2,9;4,2,9;3,1,7;area(x,y)fill(x,y,r),三、其他图形函数,(二)面积图和实心图,三、其他图形函数,(三)直方图,格式:hist(y,m)%统计每段的元素个数并画出直方图hist(y,x)说明:m是分段的个数,省略时则默认为10;x是向量,用于指定所分每个数据段的中间值;y可以是向量或矩阵,如果是矩阵则按列分段。,三、其他图形函数,(三)直方图,【例12】:y=randn(10,2)y=-1.66558437823810 0.72579054829330,三、其他图形函数,(三)直方图,-0.03763327659332 0.05928146052361 0.32729236140865-0.09564840548367 x=-2:0.5:2;hist(y,x)x=-4:1:5;hist(y,x),三、其他图形函数,(三)直方图,三、其他图形函数,(四)饼图,饼图是用于显示向量中的各元素占向量元素总和的百分比。格式:pie(x,explode,label)%画二维饼图 pie3(x,explode,label)%画三维饼图说明:x是向量;explode是与x同长度的向量,用来决定是否从饼图中分离对应的一部分块,非零元素表示该部分需要分离;label是用来标注饼图的字符串数组。,三、其他图形函数,(四)饼图,【例12】:某班计算机考试,90分以上32人,80-90分58人,70-80分27人,60-70分21人,60分以下16人。x=32 58 27 21 16;explode=0 0 0 0 1;pie(x,explode)pie(x,explode,90以上,80-90,70-80,60-70,60以下),三、其他图形函数,(四)饼图,三、其他图形函数,(一)工具栏,四、图形窗口的功能,(二)菜单,(a)Edit菜单(b)Insert菜单,四、图形窗口的功能,五、动画制作,MATLAB提供getframe、moviein和movie函数进行动画制作。1getframe函数getframe函数可截取一幅画面信息(称为动画中的一帧),一幅画面信息形成一个很大的列向量。显然,保存n幅图面就需一个大矩阵。,五、动画制作,2moviein函数moviein(n)函数用来建立一个足够大的n列矩阵。该矩阵用来保存n幅画面的数据,以备播放。之所以要事先建立一个大矩阵,是为了提高程序运行速度。3movie函数movie(m,n)函数播放由矩阵m所定义的画面n次,缺省时播放一次。,【例12】:绘制了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:20view(-37.5+24*(i-1),30)%改变视点m(:,i)=getframe;%将图形保存到m矩阵end movie(m,2);%播放画面2次,五、动画制作,