MATLAB三维散点图scatter3plote
第三章 Matlab图形绘制,主要内容,3.1. 二维曲线的绘制,3.2. 三维曲线的绘制,3.3 三维网线图和曲面图的绘制,3.4 Matlab图形处理的基本技术,3.5 动画技术,3.6 图形用户界面设计,3.1 二维曲线的绘制,1、绘制二维图形最常用的函数是plot,调用格式有以下四种:,(1)plot(Y) 如果Y为实向量,则以Y的索引坐标作为横坐标,以Y本身的元素作为纵坐标。如果Y为复数向量,则以该向量实部为横坐标,虚部为纵坐标。,(2)plot(X,Y)此时以X为横坐标,Y为纵坐标。X和Y要求维数必须相同。当变量X和Y是同阶矩阵时,将按照矩阵的行或列进行操作。,(3)plot(X,Y,s) 第三个变量用于设置图形显示属性。设置图形的线型、颜色、标记等。,(4)plot(X1,Y1,s1,X2,Y2,s2,.) 每三项为一组绘制多条曲线。,y=rand(100,1);plot(y),x=rand(100,1);z=x+y.*i;plot(z),示例:,x=0:0.01*pi:2*pi;y=sin(x),cos(x);plot(x,x,y);,x=0:0.01*pi:pi;y=sin(x);z=cos(x);plot(x,y,-k,x,z,-.rd);,Matlab绘图命令中的各种选项,2、特殊的二维图形函数,(1)特殊坐标系的二维图形函数,区别于均匀单y轴坐标系而言,具体有对数坐标系、极坐标系和双y轴坐标等。,对数坐标曲线,主要有semilogx,semilogy和loglog,前两个分别以x坐标和y坐标为对数坐标,后一个是双对数坐标。,x = 0:.1:10;semilogy(x,10.x),x=1:0.1*pi:2*pi;y=sin(x);semilogx(x,y,'-*'),x = logspace(-1,2);loglog(x,exp(x),'-s')grid on,极坐标系函数polar,调用形式为:polar(theta,rho)或polar(theta,rho,s),双纵坐标(双y轴坐标系)函数plotyy,调用形式为:plotyy(X1,Y1,X2,Y2)plotyy(X1,Y1,X2,Y2,fun) fun可以是plot、semilogx、semilogy或loglogplotyy(X1,Y1,X2,Y2,fun1,fun2) fun1绘制(X1,Y1),fun2绘制(X2,Y2),注:双坐标绘制图形的调用过程中,不能够像前面的plot函数那样对曲线属性进行设置,需要使用句柄图形控制完成。,x = 0:0.01:20;y1 = 200*exp(-0.05*x).*sin(x);y2 = 0.8*exp(-0.5*x).*sin(10*x);AX,H1,H2 = plotyy(x,y1,x,y2,'plot');,AX是对应两个坐标轴的句柄,H1和H2分别是对应plot的句柄。,(2)二维特殊函数图形,Polar绘制极坐标,示例:theta=linspace(0,2*pi);r=cos(2*theta);polar(theta,r),Hist用来显示资料的分段情况和统计特性,适合于大量数据的情况,示例:x=randn(9999,1);hist(x,50),Rose与hist接近,将资料的大小视为角度,资料的个数作为距离,采用极坐标绘图。,示例:x=randn(9999,1);rose(x,50),Bar函数适合于数据点不多时使用,示例:x=1:15;y=rand(size(x);bar(x,y);,如果已知数据的误差量,可用errorbar表示。,示例:x=linspace(0,2*pi,20);y=sin(x);z=std(y)*ones(size(x);errorbar(x,y,z);,fplot函数可以绘制较精确的图形,适合于变化剧烈的函数。,示例:fplot(sin(1/x),0.01,0.3),Stem产生针状图,常被用来绘制数位讯号。,x=linspace(0,10,100);y=sin(x).*exp(-x/4);stem(x,y);,Fill将资料点视为多边形顶点,并将此多边形涂上颜色。,x=linspace(0,10,100);y=sin(x).*exp(-x/4);fill(x,y,c);,Feather函数将每一个数据点视为复数,并以箭头画出。,theta=linspace(0,2*pi,40);z=cos(theta)+i*sin(theta);feather(z);,Compass函数与feather函数接近,只是每个箭头的起点都在圆内,theta=linspace(0,2*pi,40);z=cos(theta)+i*sin(theta);compass(z);,Quiver用来绘制向量场图。,x,y=meshgrid(-2:0.2:2);z=x.*exp(-x.2-y.2);Dx,Dy=gradient(z,0.2,0.2);Contour(x,y,z);hold on;quiver(x,y,Dx,Dy);colormap hsv ;hold off,3、显函数、隐函数和符号函数作图,(1)fplot(fun,lims)绘制由字符串fun指定函数名的函数在x轴区间为lims=xmin, xmax的函数图。若lims=xmin,xmax,ymin,ymax,则y轴也被限制。,例题:,解 1)首先用M文件fun1.m定义函数f(x)如下function y=Afun1(x);if x<1y=x+1;elsey=1+1./x;end在matlab命令窗口输入fplot('Afun1',-3,3)就可画出函数 f (x) 的图形。,2)这里也可以使用匿名函数,编写程序如下fun2=(x) (x+1)*(x=1);fplot(fun2,-3,3),(2) ezplot(f)可用来绘制显函数、隐函数和参数方程的图形,x轴的默认范围为-2pi,2pi。1)对于显函数y=f(x),调用格式为:ezplot(f,xmin,xmax)2)对于隐函数f(x,y)=0,调用格式为:ezplot(f,xmin,xmax,ymin,ymax)ezplot(f,a,b),x与y在(a,b)区间之内。3)对于参数方程x=x(t),y=y(t),调用格式为:ezplot(x,y)或者ezplot(f,tmin,tmax),示例1:ezplot(x2*sin(x+y2)+y2*exp(x+y)+5*cos(x2+y),-10 10);,示例2:ezplot('cot(x)'),示例3:ezplot('x2+y2/4=1'),示例4:ezplot(x2+y2-1,-1,1,-1,1),示例5:ezplot(x3+y3-5*x*y)示例6:ezplot(2*cos(t),sin(t),0,2*pi);,3.2 三维曲线的绘制,绘制三维曲线的函数是plot3,与plot函数的调用格式相同,也有以下四种:,plot3(x,y,z)plot3(X,Y,Z) X,Y,Z是相同阶数的矩阵,绘出三矩阵的列向量的曲线。plot3(X,Y,Z,s)plot3(x1,y1,z1,s1,x2,y2,z2,s2,.)组合图形,以第二种形式为例:,x,y=meshgrid(-2:0.1:2,-2:0.1:2);z=x.*exp(-x.2-y.2);plot3(x,y,z),MATLAB对于网格的处理方法是:将xy平面按指定方式分隔成平面网格,然后根据程序中给定的方式计算第三维变量的值,即z轴的值,与对应的xy平面的坐标构成三维点元素,根据由此得到的(x,z)和(y,z)计算各平面的曲线,彼此相连就构成了网格图。,3.3 三维网线图和曲面图的绘制,(1)网线图mesh函数,X,Y=meshgrid(x,y) x和y是给定的向量,可以定义网格的划分区域,也可以定义网格的划分方法,X和Y是网格划分后的数值矩阵。mesh(X,Y,Z,C)绘制四个矩阵变量的彩色网格面图形,观测点由view定义,坐标轴由axis定义,C设置颜色,由colormap实现。mesh(X,Y,Z) 使用C=Z,即颜色正比于图高。mesh(x,y,Z,C)由两个向量代替矩阵,要求length(x)=n,length(y)=m,且m,n=size(Z),示例1:,x=-2:0.1:2;y=-2:0.1:2;xx,yy=meshgrid(x,y);zz=xx.2+yy.2;%ii=find(xx.2+yy.2>4);zz(ii)=NaN;surf(xx,yy,zz);,x=-10:0.5:10;y=-8:0.5:8;x,y=meshgrid(x,y);z=sin(sqrt(x.2+y.2)./sqrt(x.2+y.2);mesh(x,y,z);,示例2:,(2)着色函数surf,surf(X,Y,Z,C)输入参数的设置和mesh相同,不同的是mesh绘制的是网格图,而surf绘制的着色的三维表面。两者对比如下图所示,(3)特殊的三维绘图命令,(4)旋转曲面图 cylinder,X,Y,Z = cylinder(r) 这里的r表示构成旋转曲面的曲线。,方法一: Matlab程序如下。 x=0:10:600; X,Y,Z=cylinder(30*exp(-x/400).*sin(x+25*pi)/100)+130); surf(X,Y,Z)方法二:将旋转曲面用参数方程表示。,解 因为这里的函数是隐函数,化成显函数后有两支,必须使用参数方程,旋转面的参数方程为,画图的Matlab程序如下:alpha=0:0.1:2*pi' beta=0:0.1:2*pi; x=4*cos(alpha)*ones(size(beta); y=(5+4*sin(alpha)*cos(beta); z=(5+4*sin(alpha)*sin(beta); surf(x,y,z),画图的Matlab程序也可以写成 x=(alpha,beta) 4*cos(alpha); y=(alpha,beta) (5+4*sin(alpha)*cos(beta); z=(alpha,beta) (5+4*sin(alpha)*sin(beta); ezsurf(x,y,z),(5)绘制柱面图,柱面平行于某个坐标轴,方程中不出现某个坐标轴的变量,方程表示为F(x,y)=0或者F(x,z)=0或者F(y,z)=0,示例一:画出方程 表示的柱面,解:方程中的x是自变量矩阵,z是因变量,则另一个自变量矩阵为y,自变量平面是xoy面,x轴是真正的自变量,y轴是柱面方向。Matlab程序如下:u=linspace(-5,5,10)'%设定参数列向量uv=linspace(-5,10,10); %设定参数行向量vX=u*ones(size(v); %构成自变量矩阵XY=ones(size(u)*v; %构成自变量矩阵YZ=2-X.2; %求因变量Zmesh(X,Y,Z),(6)其他二次曲面,Matlab中使用绘图命令ezmesh或ezsurf也很方便,只需要把曲面方程写成两个变量的显函数方程或参数方程即可。,对于旋转面,如果母线的方程可以表示成关于旋转轴变量的显式函数,则可以直接使用Matlab工具箱中的命令cylinder,否则必须把旋转面化成参数方程,然后使用ezmesh或ezsurf命令绘图。对于其它的二次曲面,如果可以写成显函数直接使用命令ezmesh或ezsurf,否则必须先化成参数方程。,