第6章A部分数据可视及探索视觉是人们感受世界、认识自然的最重要依靠。数据可视化的目的:借助几何、色彩媒质表现一堆貌似杂乱的离散数据集合的形态,暴露数据内在关系和总体趋势,进而揭示出数据所传递的内在本质。随着计算机软硬件的发展,能力越来越强的图形表现,反过来对科学计算方法本身也产生了越来越大的影响。针对符号计算和数值计算,MATLAB配置了两套形式上不同的绘图指令:“图形易绘指令”和“数值绘图指令”。前者配合符号计算,已安排在第5.8节;而本章内容将完全围绕数值绘图展开。本章将系统地阐述:离散数据表示成图形的基本机理;曲线、曲面绘制的基本技法和指令;特殊图形的生成和使用示例;如何使用线型、色彩、数据点标记凸现不同数据的特征;如何利用着色、灯光照明、反射效果、材质体现和透明度处理渲染、烘托表现高维函数的性状;如何生成和运用标识,画龙点睛般地注释图形;如何表现变址、灰度、真彩图象;如何制作动画等。随着MATLAB版本的升级,现今的MATLAB图形窗不再是“单向性的图形显示工具”,而已成为进行“双向性探索的图形交互界面”。为此,占本章四分之一篇幅的第6.8节用于专门叙述全交互式绘图、图形对象属性的交互式设置、绘图用M函数文件的自动生成、以及用于数据探索的数据探针、数据刷和数据链。整章内容安排遵循由浅入深、由基本到高级、由算例带归纳的原则。所有算例都是运行实例,易于读者实践试验,并从中掌握一般规律。顺便指出:由于纸质印刷版无法表现图形色彩,因此,请读者阅读本章时,能同时参看对应的电子文档“ch06_数据可视及探索.doc”。该文档存放在随书光盘mbook目录。此外,算例中带exm前缀文件名的M文件电子文档则保存在随书光盘的mfile目录上。6.1引导6.1.1离散数据和离散函数的可视化【例6.1-1】图形表示离散函数ny。(图6.1-1)n=(-10:10)';y=abs(n);plot(n,y,'r.','MarkerSize',20)axisequalgridonxlabel('n')-10-8-6-4-20246810-2024681012n图6.1-1离散函数的可视化6.1.2连续函数的可视化【例6.1-2】用图形表示连续调制波形)9sin()sin(tty。(图6.1-2)t1=(0:11)/11*pi;t2=(0:400)/400*pi;t3=(0:50)/50*pi;y1=sin(t1).*sin(9*t1);y2=sin(t2).*sin(9*t2);y3=sin(t3).*sin(9*t3);subplot(2,2,1),plot(t1,y1,'r.')%7axis([0,pi,-1,1]),title('(1)点过少的离散图形')subplot(2,2,2),plot(t1,y1,t1,y1,'r.')%9axis([0,pi,-1,1]),title('(2)点过少的连续图形')subplot(2,2,3),plot(t2,y2,'r.')%11axis([0,pi,-1,1]),title('(3)点密集的离散图形')subplot(2,2,4),plot(t3,y3)%13axis([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-2连续函数的图形表现方法【例6.1-3】绘制奇数正多边形及圆。(图6.1-3)N=9;t=0:2*pi/N:2*pi;x=sin(t);y=cos(t);tt=reshape(t,2,(N+1)/2);tt=flipud(tt);tt=tt(:);xx=sin(tt);yy=cos(tt);subplot(1,2,1),plot(x,y)title('(1)正常排序图形'),axisequaloff,shgsubplot(1,2,2),plot(xx,yy)title('(2)非正常排序图形'),axisequaloff,shg(1)正常排序图形(2)非正常排序图形图6.1-3自变量排列次序对连续曲线图形的影响6.1.3可视化的一般步骤1.绘制二维图形的一般步骤2.绘制三维图形的一般步骤6.2二维线图及修饰操作6.2.1基本指令plot的调用格式1.基本调用格式【例6.2-1】本例演示:plot的最基本调用格式;绘图的基本步骤和方法;“三元组”的含义;plot的单输入调用格式,以及它所产生图形与“三元组”图形的区别。x=0:0.05*pi:2*pi;y=exp(-x/3).*cos(2*x);subplot(2,1,1)plot(x,y,'o-r')axis([0,2*pi,-1,1])subplot(2,1,2)plot(y)axis([1,length(y),-1,1])图6.2-1三元组调用格式与单输入格式图形的区别2.衍生调用格式【例6.2-2】本例演示:因变量为多列数组的plot调用格式;plot(t,Y)plot(Y)所绘曲线的区别;“线宽”属性的设置。(图6.2-2)clft=(0:pi/20:2*pi)';k=0.4:0.1:1;Y=cos(t)*k;plot(t,Y,'LineWidth',2)axistight图6.2-2采用矩阵因变量和默认色彩绘制多条曲线3.带属性设置的调用格式【例6.2-3】用图形表示连续调制波形)9sin()sin(tty及其包络线。(图6.2-3)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);%5plot(t,y1,'r:',t,y2,'-bo')%6holdonplot(t3,y3,'s','MarkerSize',10,'MarkerEdgeColor',[0,1,0],'MarkerFaceColor',[1,0.8,0])%8axistight%9holdoff%10%%%plot(t,y1,'r:',t,y2,'-bo',t3,y3,'s','MarkerSize',10,'MarkerEdgeColor',[0,1,0],'MarkerFaceColor',[1,0.8,0])%1100.511.522.53-1-0.8-0.6-0.4-0.200.20.40.60.81图6.2-3采用属性设置所绘的曲线6.2.2坐标控制和图形标识1.坐标轴的控制【例6.2-4】观察各种轴控制指令的影响。演示采用长轴为3.25,短轴为1.15的椭圆。注意:采用多子图(图6.2-4)表现时,图形形状不仅受“控制指令”影响,而且受整个图面“宽高比”及“子图数目”的影响。本书这样处理,是出于篇幅考虑。读者欲想准确体会控制指令的影响,请在全图状态下进行观察。t=0:2*pi/99:2*pi;x=1.15*cos(t);y=3.25*sin(t);subplot(2,3,1)plot(x,y)axisnormalgridontitle('NormalandGridon')subplot(2,3,2),plot(x,y)axisequalgridon,title('Equal')subplot(2,3,3),plot(x,y)axissquaregridon,title('Square')subplot(2,3,4),plot(x,y)axisimageboxofftitle('ImageandBoxoff')subplot(2,3,5),plot(x,y)axisimagefillboxoff,title('ImageandFill')subplot(2,3,6),plot(x,y)axistightboxoff,title('Tight')-202-4-2024NormalandGridon-202-202Equal-202-4-2024Square-101-202ImageandBoxoff-101-1-0.500.51ImageandFill-101-202Tight图6.2-4各种轴控制指令的不同影响2.分格线和坐标框3.图形标识指令4.标识字符的精细控制【例6.2-5】通过绘制二阶系统阶跃响应。,综合演示图形标识。本例比较综合,涉及的指令较广。请读者耐心读、实际做、再看例后说明,定会有匪浅收益。(图6.2-5)clf;t=6*pi*(0:100)/100;y=1-exp(-0.3*t).*cos(0.7*t);plot(t,y,'r-','LineWidth',3)%3holdontt=t(find(abs(y-1)0.05));ts=max(tt);%5plot(ts,0.95,'bo','MarkerSize',10)%6holdoffaxis([-inf,6*pi,0.6,inf])set(gca,'Xtick',[2*pi,4*pi,6*pi],'Ytick',[0.95,1,1.05,max(y)])%9set(gca,'XtickLabel',{'2*pi';'4*pi';'6*pi'})%10set(gca,'YtickLabel',{'0.95';'1';'1.05';'max(y)'})%11gridontext(13.5,1.2,'\fontsize{12}{\alpha}=0.3')%13text(13.5,1.1,'\fontsize{12}{\omega}=0.7')%14cell_string{1}='\fontsize{12}\uparrow';%15cell_string{2}='\fontsize{16}\fontname{隶书}镇定时间';cell_string{3}='\fontsize{6}';cell_string{4}=['\fontsize{14}\rmt_{s}='num2str(ts)];%18text(ts,0.85,cell_string,'Color','b','HorizontalAlignment','Center')%19title('\fontsize{14}\ity=1-e^{-\alphat}cos{\omegat}')%20xlabel('\fontsize{14}\bft\rightarrow')ylabel('\fontsize{14}\bfy\rightarrow')%222*pi4*pi6*pi0.9511.05max(y)=0.3=0.7镇定时间ts=9.6133y=1-e-tcostty图6.2-5二阶阶跃响应图的标识6.2.3多次叠绘、双纵坐标和多子图1.多次叠绘【例6.2-6】利用hold绘制离散信号通过零阶保持器后产生的波形。(图5.2-6)t=2*pi*(0:20)/20;y=cos(t).*exp(-0.4*t);stem(t,y,'g','Color','k');holdonstairs(t,y,':r','LineWidth',3)holdofflegend('\fontsize{14}\itstem','\fontsize{14}\itstairs')boxon01234567-0.4-0.200.20.40.60.81stemstairs图6.2-6两类不同曲线绘于同一图布2.双纵坐标图【例6.2-7】画出函数xxysin和积分xdxxxs0)sin(在区间]4,0[上的曲线(图6.2-7)。clf;dx=0.1;x=0:dx:4;y=x.*sin(x);s=cumtrapz(y)*dx;%2a=plotyy(x,y,x,s,'stem','plot');%3text(0.5,1.5,'\fontsize{1