1第六章数据和函数的可视化视觉是人们感受世界、认识自然的最重要依靠。数据可视化的目的在于:通过图形,从一堆杂乱的离散数据中观察数据间的内在关系,感受由图形所传递的内在本质。MATLAB一向注重数据的图形表示,并不断地采用新技术改进和完备其可视化功能。本章将系统地阐述:离散数据表示成图形的基本机理;曲线、曲面绘制的基本技法和指令;特殊图形的生成和使用示例;如何使用线型、色彩、数据点标记凸现不同数据的特征;如何利用着色、灯光照明、反射效果、材质体现和透明度处理渲染、烘托表现高维函数的性状;如何生成和运用标识,画龙点睛般地注释图形;如何显示和转换unit8、unit16、double三种不同数据类型所体现的变址、灰度和真彩图象,如何读写各种标准图象格式文件;如何通过图形窗的交互操作对图形进行修饰、调整;如何打印和输出图形文件。本章的图形指令只涉及MATLAB的“高层”绘图指令。这种指令的形态和格式友善,易于理解和使用。整章内容遵循由浅入深、由基本到高级、由算例带归纳的原则。所有算例都是运行实例,易于读者实践试验,并从中掌握一般规律。MATLAB从5.x向6.x版本升级后,旧版中的本章全部内容几乎可以不加修改地用于6.x版。此外,本章新版为适应升级增加了或改变了如下内容:MATLAB从6.0版起,图形对象“面”、“块”、“象”具备了透明属性,进一步增强了计算结果可视化的感染力。为此,本章专设第6.5.4节,详细阐述透明度处理的机理和指令协调细节。在MATLAB升级过程中,专门用于图像数据存储的unit8,unit16数据类型进一步完善。对此,本章专辟第6.6.3节说明这种数据类型的特点和使用注意事项。本章还对升级后的图形窗界面的编辑功能进行了新的全面阐述(见第6.7节)。6.1引导6.1.1离散数据和离散函数的可视化【例6.1.1-1】用图形表示离散函数1)6(ny。n=0:12;y=1./abs(n-6);plot(n,y,'r*','MarkerSize',20)gridonWarning:Dividebyzero.0246810120.10.20.30.40.50.60.70.80.912图6.1-16.1.2连续函数的可视化【例6.1.2-1】用图形表示连续调制波形)9sin()sin(tty。t1=(0:11)/11*pi;%1y1=sin(t1).*sin(9*t1);t2=(0:100)/100*pi;%3y2=sin(t2).*sin(9*t2);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)')0123-1-0.500.51子子(1)0123-1-0.500.51子子(2)0123-1-0.500.51子子(3)0123-1-0.500.51子子(4)图6.1-26.1.3可视化的一般步骤6.1.3.1绘制二维图形的一般步骤6.1.3.2绘制三维图形的一般步骤6.2二维曲线绘图的基本操作6.2.1plot的基本调用格式【例6.2.1-1】简单例题,比较方便的试验指令。3t=(0:pi/50:2*pi)';k=0.4:0.1:1;Y=cos(t)*k;plot(t,Y)01234567-1-0.8-0.6-0.4-0.200.20.40.60.81图6.2-1【例6.2.1-2】用图形表示连续调制波形)9sin()sin(tty及其包络线。t=(0:pi/100:pi)';%1y1=sin(t)*[1,-1];%2y2=sin(t).*sin(9*t);%3t3=pi*(0:9)/9;%4y3=sin(t3).*sin(9*t3);plot(t,y1,'r:',t,y2,'b',t3,y3,'bo')%5axis([0,pi,-1,1])%600.511.522.53-1-0.8-0.6-0.4-0.200.20.40.60.81图6.2-2【例6.2.1-3】用复数矩阵形式画Lissajous图形。(在模拟信号时代,Lissajous图形常用来测量信号的频率。)t=linspace(0,2*pi,80)';%1X=[cos(t),cos(2*t),cos(3*t)]+i*sin(t)*[1,1,1];%(80x3)的复数矩阵plot(X)%3axissquare%4legend('1','2','3')4-1-0.500.51-1-0.8-0.6-0.4-0.200.20.40.60.81123图6.2-3【例6.2.1-4】采用模型1252222ayax画一组椭圆。th=[0:pi/50:2*pi]';a=[0.5:.5:4.5];X=cos(th)*a;Y=sin(th)*sqrt(25-a.^2);plot(X,Y),axis('equal'),xlabel('x'),ylabel('y')title('AsetofEllipses')-6-4-20246-4-3-2-101234xyAsetofEllipses图6.2-46.2.2曲线的色彩、线型和数据点形6.2.2.1色彩和线型6.2.2.2数据点形【例6.2.2.2-1】用图形演示平面上一个方块四个顶点在仿射投影(AffineProjection)下的位置、形状变化。%p1=[-0.5,0,1]';p2=[-0.5,1,1]';p3=[0.5,1,1]';p4=[0.5,0,1]';Sq=[p1,p2,p3,p4,p1];5%dx=0.5;dy=1;T=[1,0,dx;0,1,dy;0,0,1];%th=pi/6;R=[cos(th),-sin(th),0;sin(th),cos(th),0;0,0,1];%alpha=2;beta=3;S=[alpha,0,0;0,beta,0;0,0,1];E=eye(3,3);%10TRS={E,T,R,S};%11ss={'r^','rd','rp','rh'};%12tt={'OriginalSquare','Translation','Rotation','Scaling'};%13fori=1:4W=TRS{i}*Sq;%subplot(2,2,i)fork=1:4plot(W(1,k),W(2,k),ss{k});%19axis([-3,3,-1,5]),axisequalholdon%21endplot(W(1,:),W(2,:))%23gridon%title(tt{i})%holdoff%end-202-1012345OriginalSquare-2024-1012345Translation-4-202-1012345Rotation-202-1012345Scaling图6.2-56.2.3坐标、刻度和分格线控制6.2.3.1坐标控制【例6.2.3.1-1】观察各种轴控制指令的影响。演示采用长轴为3.25,短轴为1.15的椭圆。注意:采用多子图表现时,图形形状不仅受“控制指令”影响,而且受整个图面“宽高比”及“子图数目”的影响。本书这样处理,是出于篇幅考虑。读者欲想准确体会控制指令的影响,请在全图状态下进行观察。(图6.2-6)t=0:2*pi/99:2*pi;6x=1.15*cos(t);y=3.25*sin(t);%subplot(2,3,1),plot(x,y),axisnormal,gridon,title('NormalandGridon')subplot(2,3,2),plot(x,y),axisequal,gridon,title('Equal')subplot(2,3,3),plot(x,y),axissquare,gridon,title('Square')subplot(2,3,4),plot(x,y),axisimage,boxoff,title('ImageandBoxoff')subplot(2,3,5),plot(x,y),axisimagefill,boxofftitle('ImageandFill')subplot(2,3,6),plot(x,y),axistight,boxoff,title('Tight')-202-4-2024NormalandGridon-202-202Equal-202-4-2024Square-101-202ImageandBoxoff-101-1-0.500.51ImageandFill-101-202Tight图6.2-66.2.3.2刻度、分格线和坐标框【例6.2.3.2-1】通过绘制二阶系统阶跃响应,综合演示图形标识。本例比较综合,涉及的指令较广。请读者耐心读、实际做、再看例后说明,定会有匪浅收益。(图6.2-7)clf;t=6*pi*(0:100)/100;y=1-exp(-0.3*t).*cos(0.7*t);tt=t(find(abs(y-1)0.05));ts=max(tt);%2plot(t,y,'r-','LineWidth',3)%3axis([-inf,6*pi,0.6,inf])%4set(gca,'Xtick',[2*pi,4*pi,6*pi],'Ytick',[0.95,1,1.05,max(y)])%5gridon%6title('\ity=1-e^{-\alphat}cos{\omegat}')%7text(13.5,1.2,'\fontsize{12}{\alpha}=0.3')%8text(13.5,1.1,'\fontsize{12}{\omega}=0.7')%9holdon;plot(ts,0.95,'bo','MarkerSize',10);holdoff%10cell_string{1}='\fontsize{12}\uparrow';%11cell_string{2}='\fontsize{16}\fontname{隶书}镇定时间';%12cell_string{3}='\fontsize{6}';%13cell_string{4}=['\fontsize{14}\rmt_{s}='num2str(ts)];%14text(ts,0.85,cell_string)%15xlabel('\fontsize{14}\bft\rightarrow')%16ylabel('\fontsize{14}\bfy\rightarrow')%1776.283212.566418.84960.9511.051.2843y=1-e-atcoswta=0.3w=0.7?镇定时间ts=9.6133ty图6.2-76.2.4图形标识6.2.4.1简捷指令形式6.2.4.2精细指令形式【例6.2.4.2-1】本例非常简单,专供试验标识用。clf;t=0:pi/50:2*pi;y=sin(t);plot(t,y);axis([0,2*pi,-1.2,1.2])text(pi/2,1,'\fontsize{16}\leftarrow\itsin(t)\fontname{隶书}极大值')0123456-1-0.8-0.6-0.4-0.200.20.40.60.81?sin(t)极大值图6.2-886.2.5多次叠绘、双纵坐标和多子图6.2.5.1多次叠绘【例6.2.5.1-1】利用hold绘制离散信号通过零阶保持器后产生的波形。t=2*pi*(0:20)/20;y=cos(t).*exp(-0.