1、个人收集整理 勿做商业用途7 数据和函数de可视化7.1 引导7.1.1 离散数据和离散函数的可视化【*例7.1。11】用图形表示离散函数.n=0:12;%产生一组自变量数据 y=1./abs(n6);%计算相应点的函数值 plot(n,y,r*,MarkerSize,20)%用红花标出数据点grid on画坐标方格 Warning: Divide by zero.图 7.1。1-1 离散函数的可视化7.1.2 连续函数的可视化【例7.1。2-1】用图形表示连续调制波形。t1=(0:11)/11pi;%1y1=sin(t1).*sin(9*t1);t2=(0:100)/100*pi;%3y2=
2、sin(t2)。sin(9t2);subplot(2,2,1),plot(t1,y1,r.),axis(0,pi,1,1),title(子图 (1))subplot(2,2,2),plot(t2,y2,r。),axis(0,pi,-1,1),title(子图 (2))subplot(2,2,3),plot(t1,y1,t1,y1,r.)axis(0,pi,-1,1),title(子图 (3))subplot(2,2,4),plot(t2,y2)axis(0,pi,1,1),title(子图 (4)) 图 7。1。21 连续函数的图形表现方法7.1.3 可视化的一般步骤7.1.3.1 绘制二维图
3、形的一般步骤7.1.3.2 绘制三维图形的一般步骤7.2 二维曲线绘图的基本操作7.2.1 plot的基本调用格式【例7。2.11】简单例题,比较方便的试验指令。t=(0:pi/50:2pi);k=0。4:0.1:1;Y=cos(t)k;plot(t,Y) 图 7.2.1-1 plot指令基本操作演示【*例7。2。1-2】用图形表示连续调制波形 及其包络线。t=(0:pi/100:pi);长度为101的时间采样列向量1y1=sin(t)*1,1;%包络线函数值,是(101x2)的矩阵2y2=sin(t).sin(9t);%长度为101的调制波列向量t3=pi(0:9)/9;%axis(0,pi
4、,-1,1)%控制轴的范围6 图7.2.12【*例7.2。1-3】用复数矩阵形式画Lissajous图形.(在模拟信号时代,Lissajous图形常用来测量信号的频率.)t=linspace(0,2pi,80);1X=cos(t),cos(2*t),cos(3t)+i*sin(t)1, 1, 1;%(80x3)的复数矩阵plot(X)%3axis square使坐标轴长度相同4legend(1,2,3)图例 图 7.2.13 Lissajous 图【例7。2.1-4】采用模型画一组椭圆。th = 0:pi/50:2pi;%长度为101的列向量a = 0。5:。5:4.5;%长度为9的行向量X
5、= cos(th)*a;%(101x9)的矩阵Y = sin(th)*sqrt(25a.2);(101x9)的矩阵plot(X,Y),axis(equal),xlabel(x), ylabel(y)title(A set of Ellipses) 图 7.2.14 一组椭圆7.2.2 曲线的色彩、线型和数据点形7.2.2.1 色彩和线型7.2.2.2 数据点形【例7。2。2.21】用图形演示平面上一个方块四个顶点在仿射投影(Affine Projection)下的位置、形状变化。%平面上的四个点和它们构成的方块p1=0.5,0,1;p2=0。5,1,1;p3=0.5,1,1;p4=0.5,0,
6、1;Sq=p1,p2,p3,p4,p1;%平移投影:沿x轴移动0。5 , 沿y轴移动1 。dx=0.5;dy=1;T=1,0,dx;0,1,dy;0,0,1;旋转投影:逆时针旋转30度。th=pi/6;R=cos(th),-sin(th),0;sin(th),cos(th),0;0,0,1;刻度投影:x方向放大到2倍,y方向放大到3倍。alpha=2;beta=3;S=alpha,0,0;0,beta,0;0,0,1;E=eye(3,3);%为编程方便,设计一个单位阵。在它投影下,任何形状都不变。10TRS=E,T,R,S;%用元胞数组存放四个变换矩阵tt=Original Square,Tr
7、anslation,Rotation,Scaling;用元胞数组存放四张子图的图名axis(-3,3,1,5),axis equalhold on%使以后图形画在当前子图上21endplot(W(1,:),W(2,:))%连接四个顶点使图形封闭grid on画过坐标格线title(tti)%给子图题写图名hold off%使以后图形不再画在当前子图上end 图 7。2.2。2-1 仿射投影演示7.2.3 坐标、刻度和分格线控制7.2.3.1 坐标控制【例7。2.3。11】观察各种轴控制指令的影响。演示采用长轴为3。25,短轴为1。15的椭圆。注意:采用多子图表现时,图形形状不仅受“控制指令”影
8、响,而且受整个图面“宽高比”及“子图数目”的影响.本书这样处理,是出于篇幅考虑。读者欲想准确体会控制指令的影响,请在全图状态下进行观察。t=0:2*pi/99:2pi;x=1.15cos(t);y=3.25*sin(t);%y为长轴,x为短轴subplot(2,3,1),plot(x,y),axis normal,grid on,title(Normal and Grid on)subplot(2,3,2),plot(x,y),axis equal,grid on,title(Equal)subplot(2,3,3),plot(x,y),axis square,grid on,title(Sq
9、uare)subplot(2,3,4),plot(x,y),axis image,box off,title(Image and Box off)subplot(2,3,5),plot(x,y),axis image fill,box offtitle(Image and Fill)subplot(2,3,6),plot(x,y),axis tight,box off,title(Tight) 图7。2.3.11 各种轴控制指令的不同影响7.2.3.2 刻度、分格线和坐标框【例7.2.3.2-1】通过绘制二阶系统阶跃响应,演示MATLAB新旧版指令在标识图形上的差别。本例比较综合,涉及的指令知
10、识较广。假如读者能耐心读一下指令、实践操作一遍、再看一下例后的说明,定会有匪浅的收益.clf;t=6pi*(0:100)/100;y=1exp(-0.3t).cos(0。7t);tt=t(find(abs(y-1)0。05));ts=max(tt);2subplot(1,2,1),plot(t,y,r-,LineWidth,3),grid on3axis(0,6*pi,0。6,max(y)4title(y=1exp(alpha*t)cos(omegat)%5text(11,1.25,alpha=0。3);text(11,1.15,omega=0。7)hold on;plot(ts,0。95,b
11、o,MarkerSize,10);hold offsubplot(1,2,2),plot(t,y,r-,LineWidth,3)10axis(-inf,6pi,0。6,inf)set(gca,Xtick,2*pi,4pi,6*pi,Ytick,0。95,1,1。05,max(y))%grid on13title(it y = 1 - e -alphatcosomegat)%14text(13。5,1。2,fontsize12alpha=0。3)%text(13。5,1。1,fontsize12omega=0。7)16hold on;plot(ts,0.95,bo,MarkerSize,10);
12、hold off17cell_string1=fontsize12uparrow;%cell_string2=fontsize16 fontname隶书镇定时间;cell_string3=fontsize6 ;%20cell_string4=fontsize14rmt_s = num2str(ts);21text(ts,0。85,cell_string)%22xlabel(fontsize14 bft rightarrow)23ylabel(fontsize14 bfy rightarrow)plot(t,y12,b-,t,y1,y1,r:);axis(0,pi,-1,1) 图 7。2。5。3
13、-1 多子图的布置7.2.6 交互式图形指令7.2.6.1 ginput7.2.6.2 gtext7.2.6.3 legend7.2.6.4 zoom7.3 三维绘图的基本操作7.3.1 三维线图指令plot3【例7.3。11】简单例题。t=(0:0.02:2)pi;x=sin(t);y=cos(t);z=cos(2*t);plot3(x,y,z,b,x,y,z,bd),view(-82,58),box on,legend(链,宝石) 图 7。3.11 宝石项链7.3.2 三维网线图和曲面图7.3.2.1 三维图形的数据准备(1)确定自变量的取值范围和取值间隔.(2)构成平面上的自变量采样“格
14、点”矩阵.(3)计算在自变量采样“格点”上的函数值,即Z=f(X,Y)。7.3.2.2 网线图、曲面图基本指令格式【例7.3。2.21】用曲面图表现函数。clf,x=-4:4;y=x;X,Y=meshgrid(x,y);生成 x-y 坐标“格点”矩阵Z=X.2+Y。2;%计算格点上的函数值surf(X,Y,Z);hold on,colormap(hot)stem3(X,Y,Z,bo)用来表现在格点上计算函数值图 7。3。2。2-1 曲面图和格点7.3.3 透视、镂空和裁切7.3.3.1 图形的透视【例7.3。3。11】透视演示X0,Y0,Z0=sphere(30);产生单位球面的三维坐标X=2
15、X0;Y=2*Y0;Z=2Z0;产生半径为2的球面的三维坐标clf,surf(X0,Y0,Z0);%画单位球面shading interp采用插补明暗处理hold on,mesh(X,Y,Z),colormap(hot),hold off%采用hot色图hidden off%产生透视效果axis equal,axis off%不显示坐标轴 图7。3。3.1-1 剔透玲珑球7.3.3.2 图形的镂空【*例7.3.3。2-1】演示:如何利用“非数”NaN,对图形进行剪切处理。clf;t=linspace(0,2*pi,100);r=1-exp(-t/2)。*cos(4t);%旋转母线X,Y,Z=c
16、ylinder(r,60);%产生旋转柱面数据ii=find(X0&Y条指令书写格式x , Y , 强调沿列方向画各条曲线的事实。clf;x=-2:2注意:自变量要单调变化Y=3,5,2,4,1;3,4,5,2,1;5,4,3,2,5%各因素的相对贡献份额Cum_Sum=cumsum(Y)各曲线在图上的绝对坐标area(x,Y,0)legend(因素A,因素B,因素C),grid on,colormap(spring) x = -2 1 0 1 2Y = 3 5 2 4 1 3 4 5 2 1 5 4 3 2 5Cum_Sum = 3 5 2 4 1 6 9 7 6 2 11 13 10 8
17、7图 7.4。1.1-1 面域图表现各分量的贡献7.4.1.2 各种直方图bar, barh, bar3, bar3h【例7.4。1.21】二维直方图有两种图型:垂直直方图和水平直方图。而每种图型又有两种表现模式:累计式:分组式。本例选其两种加以表现。x=2:2;%注意:自变量要单调变化Y=3,5,2,4,1;3,4,5,2,1;5,4,3,2,5;各因素的相对贡献份额subplot(1,2,1),bar(x,Y,stacked)“累计式”直方图xlabel(x),ylabel(Sigma y),colormap(cool)控制直方图的用色legend(因素A,因素B,因素C)subplot(
18、1,2,2),barh(x,Y,grouped)%“分组式”水平直方图xlabel(y),ylabel(x) 图 7.4。1。2-1 二维直方图【例7.4。1.22】用三维直方图表现上例数据。clf;x=2:2;%注意:自变量要单调变化Y=3,5,2,4,1;3,4,5,2,1;5,4,3,2,5;%各因素的相对贡献份额subplot(1,2,1),bar3(x,Y,1)%“队列式”直方图xlabel(因素ABC),ylabel(x),zlabel(y)colormap(summer)%控制直方图的用色subplot(1,2,2),bar3h(x,Y,grouped)“分组式”水平直方图yla
19、bel(y),zlabel(x) 图 7。4。1。22 三维直方图7.4.1.3 饼图pie, pie3【例7.4。1。3-1】饼图指令pie , pie3 用来表示各元素占总和的百分数。该指令第二输入宗量为与第一宗量同长的01向量,1使对应扇块突出。a=1,1。6,1.2,0。8,2.1;subplot(1,2,1),pie(a,1 0 1 0 0),legend(1,2,3,4,5)subplot(1,2,2),pie3(a,a=min(a),colormap(cool) 图 7。4.1。3-1 饼形统计图7.4.1.4 填色图fill,fill3【*例7.4。1.41】读者试验本例时,注
20、意三点:MATLAB画任意多边形的一种方法;保证绘图数据首尾重合,使勾画多边形封闭;使用图柄对图形的属性进行精细设置。clf;n=10;%多边形的边数dt=2*pi/n;t=0:dt:2*pit=t,t(1);%fill指令要求数据向量的首位重合,使图形封闭。x=sin(t);y=cos(t);fill(x,y,c);axis off画填色多边形,隐去坐标轴。ht=text(0,0,fontname隶书fontsize32十边形);文字注释,且得图柄.set(ht,Color,k,HorizontalAlignment,Center) %依靠图柄设置属性。 图 7。4.1.41 由fiil产生
21、的填色多边形【例7.4.1。42】三维填色指令fill3 演示.注意:(1)X,Y,Z的相应列元素构成一个三维封闭多边形.本例有4列,因此有4个多边形。图7。4.1。4-2中的“1,2,3,4号三角形分别由X,Y,Z的第1,2,3,4列生成。(2)为使多边形封闭,每列的首尾元素应该重合。若不重合,则将默认把最后一点与第一点相连,强行使多边形封闭。(3)该指令的第4输入宗量可取定色单字符(如r , g 等),也可取与X同维的数值矩阵.(4)所填色彩受C和色图的双重响应。(5)本例图中三角形的编号是通过“图形窗”编辑而生成的。X=0.5 0。5 0。5 0.5;0.5 0。5 0。5 0.5;0
22、1 1 0;Y=0.5 0。5 0.5 0.5;0.5 0。5 0.5 0。5;0 0 1 1;Z=1 1 1 1;0 0 0 0;0 0 0 0;C=1 0 0 1;0 1 0 1;0 0 1 0;fill3(X,Y,Z,C),view(10 55),colormap coolxlabel(x),ylabel(y),box on;grid on 图 7。4。1。4-2 三维填色7.4.1.5 射线图compass和羽毛图feather【*例7。4.1.51】 compass和feather指令的区别。t=pi/2:pi/12:pi/2;在区间,每取一点。r=ones(size(t));单位半
23、径x,y=pol2cart(t,r);极坐标转化为直角坐标subplot(1,2,1),compass(x,y),title(Compass)subplot(1,2,2),feather(x,y),title(Feather) 图 7。4.1.5-1 compass和feather指令的区别7.4.1.6 Voronoi图和三角剖分【*例7.4.1。6-1】用Voronoi多边形勾画每个点的最近邻范围。Voronoi多边形在计算几何、模式识别中有重要应用。从本例图7.4。1。61中,可以看到,三角形顶点所在多边形的三条公共边是剖分三角形边的垂直平分线.clf;rand(state,111) n
24、=30;A=rand(n,1)-0。5;B=rand(n,1)-0.5;产生30个随机点T=delaunay(A,B);%求相邻三点组T=T T(:,1);为使三点剖分三角形封闭而采取的措施voronoi(A,B)画Voronoi图hold on;axis squarefill(A(T(10,:),B(T(10,:)),y);%画一个剖分三角形voronoi(A,B)重画Voronoi图,避免线被覆盖。 图 7.4.1.61 Voronoi多边形和Delaubay三角剖分7.4.1.7 彩带图ribbon【例7。4。1.71】用彩带绘图指令ribbon ,绘制归化二阶系统在不同值时的阶跃响应,
25、如图7。4.1.7-1所示.对于本例程序,有以下几点值得注意:(1)程序中使用了Control Toolbox中的两个指令tf 和step 。这tf 是一个(MATLAB5。x版起用的)“对象”。(2)本例构作的S是一个单输入8输出系统,作用于该S的step指令也将在一次调用中产生8个子系统的阶跃响应.(3)在下段程序运行后,有兴趣的读者可显示S ,以观察系统是如何描写的。(4)本例为了得到较好的表现效果,采用了视角、明暗、色图、光照控制。(5)为使程序有一定通用性,图例采用元胞数组生成。(6)本例产生的图7.4。1。71中,除“”外,所有标识都是由下段指令产生的。(7)“中的斜向箭头无法由指
26、令生成,而是直接通过“图形窗”编辑实现的(MATLAB5。3版起用)。(8)本例程序有通用性。只要修改第2条指令对阻尼系数的设定,就可获得响应的彩带图形.clear,clfzeta2=0.1 0.2 0。3 0。4 0。5 0.6 0。8 1。0;%n=length(zeta2);for k=1:n;Numk,1=1;Denk,1=1 2*zeta2(k) 1;endS=tf(Num,Den);产生单输入多输出系统t=(0:0.4:30);时间采样点Y,x=step(S,t);%单输入多输出系统的响应tt=tones(size(zeta2));%为画彩带图,生成与函数值Y维数相同的时间矩阵。r
27、ibbon(tt,Y,0.4)画彩带图至此彩带图已经生成。以下指令都是为了使图形效果更好、标识更清楚而用。view(150,50),shading interp,colormap(jet)设置视角、明暗、色图light,lighting phong,box on设置光源、照射模式、坐标框for k=1:n;str_lgdk,1=num2str(zeta2(k));end,legend(str_lgd)图例设置str1=itG = (s2 + 2zetas + 1)-1;str2=fontsize16fontname隶书取不同;str3=fontsize10itzeta;str4=fontsiz
28、e16fontname隶书时的阶跃响应;title(str1,str2,str3,str4),zlabel(ity(zeta,t) rightarrow) 图 7。4.1.7-1 二阶系统在不同阻尼系数时的响应7.4.1.8 离散杆图stem , stem3【例7。4.1。81】本例表现一个离散方波的快速Fourier变换的幅频。本例左图用极坐标指令polar绘出,右图用三维离散杆图指令stem3 绘出。MATLAB的polar指令是建筑在plot基础上的.指令执行后,出现的极坐标轴及分度标识也是由plot以一种“固定”模式产生的.因此,极坐标轴的控制很不灵活,它只能以比较简单的方式表达函数。
29、如对于本例左图,那图形小、线条细、文字太密的缺陷,就较难克服。相比而言,先借助极坐标和直角坐标转换,然后再通过直角坐标图形指令加以表现,往往更显灵活、方便。如本例的右图.th = (0:127)/1282*pi;角度采样点rho=ones(size(th);%单位半径x = cos(th);y = sin(th);f = abs(fft(ones(10,1),128));%对离散方波进行FFT变换,并取幅值。rho=ones(size(th))+f;%取单位圆为绘制幅频谱的基准。subplot(1,2,1),polar(th,rho,r)subplot(1,2,2),stem3(x,y,f,d
30、,fill)取菱形离散杆头,并填色.view(65 30)%控制角度,为表现效果。 图 7.4。1。8-1 离散方波的幅频谱7.4.1.9 二维半图指令pcolor, contour, contourf【*例7。4。1。91】本例重点演示所谓“二维半”指令:伪彩图pcolor ;等位线指令contour、 contourf;等位线标高指令 clabel 的配合使用和区别.练习本例时注意:(1)本例等位线指令中的第4输入宗量n设定高度的等级数,第5输入宗量设定等位线的线型、色彩。(2)左右两图的标高方法不同。左图的标识以“+”引导,水平放置.右图沿线布置.这是由clabel的调用格式不同产生的。
31、(3)左右两图色彩的形成方法不同,色彩效果也不同。(4)在左图中,colorbar画出一根垂直色标尺,而caxis决定该色标尺的刻度.clf;clear;X,Y,Z=peaks(40);获得peaks图形数据n=4;%等高线分级数subplot(1,2,1),pcolor(X,Y,Z)%伪彩图colormap jet,shading interphold on,C=contour(X,Y,Z,n,k:);%用黑虚线画等位线,并给出标识数据。clabel(C)%随机标识法zmax=max(max(Z));zmin=min(min(Z);caxis(zmin,zmax)决定色标尺的范围colorb
32、ar%画垂直色标尺hold off,subplot(1,2,2)C,h,CF=contourf(X,Y,Z,n,k:);%用黑虚线画填色等位线,并给出标识数据。clabel(C,h)%沿线标识法 图 7。4.1。9-1 “二维半指令的演示7.4.1.10 散点图scatter , scatter3 , plotmatrix【*例7。4.1。101】表现函数。请注意本例中的3个指令:(1)散点图指令scatter3 ,标志三维数据点。它的前三个输入宗量必须是同长的向量,如指令5。(2)带垂帘的网线图指令meshz ,它的调用格式与mesh没有什么不同.此外,再次提醒读者注意指令2。这样处理的目的
33、是避免0/0的不定性.该处理方法是求极限的一种数值方法。x=3*pi(1:0.2:1);y=x;X,Y=meshgrid(x,y);R=sqrt(X.2+Y.2)+eps;Z=sin(R)./R;%引入eps避免0/0,%2C=abs(del2(Z));%求“五点格式”差分,反映曲面变化。meshz(X,Y,Z,C)%由曲面变化决定用色hold on,scatter3(X(:),Y(:),Z(:),filled)5hold off,colormap(hot)图 7。4.1。10-1 三维散点图【*例7.4.1.10-2】指令plotmatrix有两种基本调用方式:(1)对于数据矩阵维的X和维的Y,调用格式plotmatrix(X,Y)将画出一个分割成个子散点图。其中第个子散点图是根据Y第列