第5章MATLAB可视化 MATLAB不仅具有强大的数值运算功能,还有强大的绘图功能,能够将数据方便地以二维、三维乃至四维的图形可视化,并且能够设置图形的颜色、线性、视觉角度等。应用MATLAB除了能作一般的曲线图、条形图、散点图等统计图形外,还能绘制流线图、三维向量图等工程实用图形。由于系统采用面向对象的技术和丰富的矩阵计算,所以在图形处理方面既方便又高效。 5.1图形绘制基础 5.1.1离散函数 一个二元实数标量对(x0,y0)可以用平面上的点来表示,一个二元实数标量数组[(x1,y1),(x2,y2),…,(xn,yn)]可以用平面上的一组点来表示。对于离散函数Y=f(X),当X为一维标量数组[x1,x2,…,xn]时,根据函数关系可以求出Y相应的一维标量数组[y1,y2,…,yn]。当把这两个向量数组在直角坐标系中用点序列表示时,就实现了离散函数的可视化。当然,这些图形上的离散序列反映的只是X所限定的有限点上或是有限区间内的函数关系,应当注意的是,MATLAB是无法实现对无限区间上的数据可视化的。 【例51】在某次工程实验中,测得时间t与温度T的数据如表51所示。 表51时间与温度的关系 时间t/s0123456789101112 温度T/℃032.545.879.086.596.5107.3110.4115.7118119.2119.8120 描绘出这些点,以观察温度随时间变化的关系。 其实现的MATLAB代码如下: >> clear all; t=0:12;%输入时间t的数据 %输入温度T的数据 T=[0 32.5 45.8 79.0 86.5 96.5 107.3 110.4 115.7 118 119.2 119.8 120]; plot(t,T,'ro') %用红色描绘出相应的数据点 xlabel('时间');ylabel('温度'); 运行程序,效果如图51所示。 图51离散数据散点图 【例52】用图形表示离散函数y=2e-2x在[-1,1]区间二十等分点处的值。 >> clear all; x=-1:0.1:1; y=2*exp(-2*x); plot(x,y,'md'); grid on; xlabel('x');ylabel('y'); 运行程序,效果如图52所示。 图52离散函数效果图 5.1.2连续函数 在MATLAB中无法画出真正的连续函数,因此在实现连续函数的可视化时,首先必须将连续函数用在一组离散自变量上来计算函数结果,然后将自变量数组和结果数组在图形中表示出来。 当然,这些离散的点还是不能表现函数的连续性。为了更形象地表现函数的规律及其连续变化,通常采用以下两种方法。 (1) 对离散区间进行更细的划分,逐步趋近函数的连续变化特性,直到达到视觉上的连续效果。 (2) 把每两个离散点用直线连接,以每两个离散点之间的直线来近似表示两点间的函数特性。 【例53】绘制方程x=2(cost-tsint) y=2(sint+tcost)在t∈[-2π,2π]上的图像。 >> clear all; t1=-2*pi:pi/5:2*pi; t2=-2*pi:pi/20:2*pi; x1=2*(cos(t1)-t1.*sin(t1)); y1=2*(sin(t1)+t1.*cos(t1)); x2=2*(cos(t2)-t2.*sin(t2)); y2=2*(sin(t2)+t2.*cos(t2)); subplot(221);plot(x1,y1,'m.'); title('图1');axis square; subplot(222);plot(x2,y2,'m.'); title('图2');axis square; subplot(223);plot(x1,y1); title('图3');axis square; subplot(224);plot(x2,y2); title('图4');axis square; 运行程序,效果如图53所示。 图53连续函数绘图 5.1.3图形绘制实例 【例54】设函数y=x+cos(x)+ex,试利用MATLAB绘制该函数在x∈-π2π2上的图像。 (1) 准备图形数据。用户需要选定数据的范围,选择对应范围的自变量,计算相应的函数值,代码为: >> clear all; x=-pi/2:0.01:pi/2; y=x+cos(x)+exp(x); (2) 使用plot函数绘图图形,代码为: >> plot(x,y) 运行程序,效果如图54所示。 图54绘制的函数图像 (3) 为了更好地观察各个数据点的位置,给背景设置网格线,同时采用红色空心星号来标记数据点,代码为: >> plot(x,y,'-ro') >> grid on; 运行程序,效果如图55所示。 图55添加网格线并修改曲线样式效果图 (4) 给图形添加一些注释。为了进一步使图形具有可读性,用户还需要给图形添加一些注释,如图形的名称、坐标轴的名称、图例、文字说明等。给实例图形取名为“y的函数图像”; x坐标轴和y坐标轴分别取名为x和y; 图例设置为“y=x+cos(x)+ex”。实现代码为: >> title('y的函数图像'); >> xlabel('x');ylabel('y'); >> legend('y=x+cos(x)+e^{x}'); 运行程序,效果如图56所示。 图56图形标注说明 (5) 图形的输出。完成图形的绘制和编程后,用户可以将图形打印或在图形窗口的菜单栏中选择“文件”|“保存为”选项,将图形保存成用户需要的格式。 5.1.4图形绘制的步骤 通过例54可以总结出,利用MATLAB绘制图形大致分为如下7个步骤。 (1) 数据准备。主要工作是产生自变量采样向量,计算相应的函数值向量。 (2) 选定图形窗口及子图位置。在默认情况下,MATLAB系统绘制的图形为figure.1、figure.2等。 (3) 调用绘图函数绘制图形,如plot函数。 (4) 设置坐标轴的范围、刻度及坐标网格。 (5) 利用对象属性值或者图形窗口工具栏设置线型、标记类型及其大小等。 (6) 添加图形注释,如图名、坐标名称、图例、文字说明等。 (7) 图形的导出与打印。 5.2二维基本绘图 二维图形是MATLAB图形的基础,也是应用最广泛的图形类型之一。MATLAB提供了许多二维图形绘制函数。 5.2.1基本绘图函数 MATLAB的基本绘图函数包括line函数、plot函数和polar函数,line函数是直角坐标系中的简单绘图函数,plot函数是直角坐标系中常用的绘图函数,而polar函数是极坐标中的绘图函数。 在MATLAB中绘制曲线的基本函数有很多,表52列出了常用的基本绘图函数。 表52常用的基本绘图函数 函数功能 plot建立向量或矩阵的图形 line将数组中的各点用线段连接起来 semilogxx轴用于对数标度,y轴线性标度绘制图形 semilogyy轴用于对数标度,x轴线性标度绘制图形 loglogx、y轴都取对数标度建立图形 plotyy在图的左右两侧分别建立纵坐标轴 subplot同一个图形窗口中同时显示多个坐标轴的图形 1. plot函数 MATLAB中最常用的二维曲线的绘图函数为plot,使用该函数MATLAB将开辟一个图形窗口,并画出坐标上的一条二维曲线。函数的调用格式为: plot(Y): 输入参数Y就是Y轴的数据,一般习惯输入向量,则plot(Y)可以用以绘制索引值所对应的行向量Y,若Y为复数,则plot(Y)等于plot(real(Y),image(Y)); 在其他几种使用方式中,如果有复数出现,则复数的虚数部分将不被考虑。 plot(X1,Y1,…,Xn,Yn): 若Xi、Yi均为实数向量,且为同维向量(可以不是同型向量),则plot先描出点(X(i),Y(i)),然后用直线依次相连; 若Xi,Yi为复数向量,则不考虑虚数部分; 若Xi、Yi均为同型实数矩阵,则plot(Xi,Yi)依次画出矩阵的几条线段; 若Xi、Yi一个为向量,另一个为矩阵,且向量的维数等于矩阵的行数或列数,则矩阵按向量的方向分解成几个向量,再与向量配对分别画出,矩阵可分解成几个向量就有几条线。在上述的几种使用形式中,若有复数出现,则复数的虚数部分将不被考虑。 plot(X1,Y1,LineSpec,…,Xn,Yn,LineSpec): LineSpec为选项(开关量)字符串,用于设置曲线颜色、线型、数据点等,如表53所示; LineSpec的标准设定值的前7种颜色(蓝、绿、红、青、品红、黄、黑)依次自动着色。 表53常用的绘图选项 选项含义选项含义 -实线.用点号标出数据点 --虚线O用圆圈标出数据点 :点线x用叉号标出数据点 -.点画线+用加号标出数据点 r红色s用小正方形标出数据点 g绿色D用菱形标出数据点 b蓝色V用下三角标出数据点 y黄色^用上三角标出数据点 m洋红<用左三角标出数据点 c青色>用右三角标出数据点 w白色H用六角形标出数据点 k黑色P用五角形标出数据点 *用星号标出数据点 plot(X1,Y1,LineSpec,'PropertyName',PropertyValue): 对所有用plot函数创建的图形进行属性值设置,常用属性如表54所示。 表54常用属性 属 性 名含义属 性 名含义 LineWidth设置线的宽度MarkerEdgeColor设置标记点的边缘颜色 MarkerSize设置标记点的大小MarkerFaceColor设置标记点的填充颜色 h = plot(X1,Y1,LineSpec,'PropertyName',PropertyValue): 返回绘制函数的句柄值h。 【例55】在[0,2π]上同时绘制三条曲线y1=sin(x)、y2=sin(x-0.25)及y3=sin(x-0.5),并设置曲线线型和颜色。 >> clear all; x = 0:pi/100:2*pi; y1 = sin(x); y2 = sin(x-0.25); y3 = sin(x-0.5); figure plot(x,y1,x,y2,'r--',x,y3,'k:') 运行程序,效果如图57所示。 图57三条正弦曲线的绘制 2. line函数 line函数用于在直角坐标系下简单画线,调用格式为: line(X,Y): X和Y都是一维数组,line函数将数组中(X(i),Y(i))代表的各点用线段连接起来,形成一条折线。 line(X,Y,Z): 创建的三维坐标中的线段。 line(X,Y,Z,'PropertyName',propertyvalue,…): 设置对应的属性名PropertyName及属性值propertyvalue。 h = line(…): 返回绘制线段的句柄值h。 【例56】利用line函数绘制线型。 >> clear all; t = 0:pi/20:2*pi; hline1 = plot(t,sin(t),'k'); ax = gca; hline2 = line(t+.06,sin(t),... 'LineWidth',4,... 'Color',[.8 .8 .8],... 'Parent',ax); set(gca,'Children',[hline1 hline2]) 运行程序,效果如图58所示。 图58line函数绘图 3. 轴对数坐标 利用semilogx、semilogy函数绘制图形时,x、y轴采用对数坐标。如果没有指定使用的颜色,当绘制的线条较多时,semilogx、semilogy函数将自动使用当前轴的ColorOrder与LineStyleOrder属性指定的颜色顺序与线型顺序来绘制。函数的调用格式为: semilogx(Y): 对x轴的刻度求常用对数(以10为底),而y轴为线性刻度。若Y为实数向量或矩阵,则结合Y的列向量下标与Y的列向量绘制出线条; 若Y为复数向量或矩阵,则semilogx(Y)等价于semilogx(real(Y),imag(Y))。在semilogx函数的其他调用格式中,Y的虚数部分将被忽略。 semilogx(X1,Y1,…): 结合Xi与Yi绘制出线条,若其中只有Xi或Yi为矩阵,另外一个为向量,行向量的维数等于矩阵的列数,列向量的维数等于矩阵的行数,则按向量的方向分解矩阵,再与向量结合,分别绘制出线条。 semilogx(X1,Y1,LineSpec,…): 按顺序取3个参数Xi、Yi、LineSpec绘制线条,参数LineSpec指定使用的线型、标记符号及颜色。用户可以混合使用二参数与三参数形式。 semilogx(…,'PropertyName',PropertyValue,…): 对所有由semilogx函数生成的图形对象句柄的属性进行设置。 h=semilogx(…): 返回line图形句柄向量,每条线对应一个句柄,相对于x轴采用对数坐标形式。 h=semilogy(…): 返回line图形句柄向量,每条线对应一个句柄,相对于y轴采用对数坐标形式。 利用loglog函数绘制图形时,x轴与y轴均采用对数坐标,其调用格式与semilogx函数相同。 【例57】绘制双对数图形、x轴半对数图形及y轴半对数图形。 >>clear all; x = 0:.1:10; figure;loglog(x,exp(x),'-s');%双对数图形 figure;semilogy(x,10.^x); %y轴半对数图形 figure;semilogx(x,10.^x); %x轴半对数图形 运行程序,效果如图59所示。 图59轴对数坐标图 4. plotyy函数 实际中,如果两组数据的数据范围相差较大,而又希望放在同一个图形中比较分析,可以绘制双y轴图形。在MATLAB中,提供了plotyy函数实现双y轴图形的绘制。函数的调用格式为: plotyy(x1,y1,x2,y2): 在一个图形窗口同时绘制两条曲线(x1,y1)和(x2,y2),曲线(x1,y1)用左侧的y轴,曲线(x2,y2)用右侧的y轴。 plotyy(x1,y1,x2,y2,fun): fun是字符串格式,用来指定绘图的函数名,如plot、semilogx等。例如,plotyy(x1,y1,x2,y2,'semilogx')就是用函数semilogx来绘制曲线(x1,y1)和(x2,y2)。 plotyy(x1,y1,x2,y2,fun1,fun2): 和第二种形式类似,只是用fun1和fun2可以指定不同的绘图函数分别绘制这两种曲线。 【例58】用不同标度在同一坐标系内绘制曲线y1=200e-0.05xsin(x)及曲线y2=0.8e-0.5xsin(10x)。 >> clear all; 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') 运行程序,输出如下,效果如图510所示。 AX = 1x2 Axes 数组: AxesAxes H1 = Line (具有属性): Color: [0 0.4470 0.7410] LineStyle: '-' LineWidth: 0.5000 Marker: 'none' MarkerSize: 6 MarkerFaceColor: 'none' XData: [1x2001 double] YData: [1x2001 double] ZData: [1x0 double] 显示 所有属性 H2 = Line (具有属性): Color: [0.8500 0.3250 0.0980] LineStyle: '-' LineWidth: 0.5000 Marker: 'none' MarkerSize: 6 MarkerFaceColor: 'none' XData: [1x2001 double] YData: [1x2001 double] ZData: [1x0 double] 显示 所有属性 图510双y轴效果图 5. subplot函数 有的时候,为了便于对比或节省绘图空间,需在同一个图形窗口中同时显示多个坐标轴的图形,即建立多个坐标系并在坐标系中分别绘图,这时就需要用到subplot函数。函数的调用格式为: subplot(m,n,p): 将当前图形窗口分成m×n个绘图区,即共m行,每行n个,子绘图区的编号按行优先从左到右编号。该函数选定第p个区为当前活动区,在每一个子绘图区允许以不同的坐标系单独绘制图形。 subplot(m,n,p,'replace'): 如果定义的坐标轴已经存在,则删除已有的,并创建一个新的坐标轴。 subplot(m,n,p,'align'): 对齐坐标轴。 subplot(h): 使句柄h对应的坐标轴为当前显示,用于后面图形的输出显示。 subplot('Position',[left bottom widthheight]): 在指定的位置上建立坐标轴。 subplot(…,prop1,value1,prop2,value2,…): 设置坐标轴的属性名及属性值。 h=subplot(…): 返回坐标轴的句柄值h。 【例59】利用subplot绘制多个子图。 >> clear all; figure y = zeros(4,15); for k = 1:4 y(k,:) = rand(1,15); subplot(2, 2, k) plot(y(k,:)); end hax = axes('Position', [.35, .35, .3, .3]); bar(hax,y,'EdgeColor','none') set(hax,'XTick',[]) 运行程序,效果如图511所示。 图511绘制多个子图 5.2.2图形注释 为了让所绘制的图形让人看起来舒服、易懂,MATLAB提供了许多图形控制函数,下面给予介绍。 1. 坐标轴注释 在MATLAB中,提供了xlabel函数给图形对象的x轴加注释; 提供了ylabel函数给图形对象的y轴加注释; 提供了zlabel函数给图形对象的z轴加注释。函数的调用格式如下: xlabel('string'): 在当前轴对象中的x轴上标注说明语句string。 xlabel(fname): 先执行函数fname,返回一个字符串,然后在x轴旁边显示出来。 xlabel(…,'PropertyName',PropertyValue,…): 指定轴对象中要控制的属性名及要改变的属性值。 h=xlabel(…): 返回作为x轴标注的text对象句柄值h。 ylabel(…): 在当前轴对象中的y轴上标注说明语句string。 h=ylabel(…): 返回作为y轴标注的text对象句柄值h。 zlabel(…): 返回作为z轴标注的text对象句柄值h。 h=zlabel(…): 返回作为z轴标注的text对象句柄值h。 2. 图形注释 在MATLAB中,提供了title函数用于给图形对象加标题。函数的调用格式为: title('string'): 在当前坐标轴上方正中央放置字符串string作为图形标题。 title(fname): 先执行能返回字符串的函数fname,然后在当前轴上方正中央放置返回的字符串作为标题。 title(…,'PropertyName',PropertyValue,…): 对由title函数生成的text图形对象的属性进行设置。 h=title(…): 返回作为标题的text对象句柄值h。 3. 标志文本 在对所绘制的图形进行详细的标注时,最常见的两个函数为text与gtext,它们均可以在图形的具体部分进行标注。函数的调用格式如下: text(x,y,'string'): 在图形中指定的位置(x,y)上显示字符串string。 text(x,y,z,'string'): 在三维图形空间中的指定位置(x,y,z)上显示字符串string。 text(x,y,z,'string','PropertyName',PropertyValue,…): 在三维图形空间中的指定位置(x,y,z)上显示字符串string,并且对指定的属性进行设置。 h=text(…): 返回text对象的句柄值h。 gtext('string'): 当光标位于一个图形窗口内时,等待用户单击或按下键盘。若单击或按下键盘,则在光标的位置放置给定的文字string。 gtext({'string1','string2','string3',…}): 当光标位于一个图形窗口内时,等待用户单击或按下键盘。若单击或按下键盘,则在光标位置的每个单独行上放置所给定的字符string1,string2,string3,…。 gtext({'string1';'string2';'string3';…}): 当光标位于一个图形窗口内时,等待用户单击或按下键盘。每单击一次或按一次键盘,即放置一个string,直到放置完为止。 h=gtext(…): 当用户在鼠标指定的位置放置文字string后,返回一个text图形对象句柄给h。 4. 添加图例 除了给图形添加标题、标注和文本,利用legend函数给图形添加注释,它用文本确认每一个数据集,为图形添加图例便于图形的观察和分析。函数的调用格式为: legend: 对当前图形中所有的图例进行刷新。 legend('string1','string2',…): 用指定的文字string1,string2,…在当前坐标轴中对所给数据的每一部分显示一个图例。 legend(h,'string1','string2',…): 用指定的文字string在一个包含于句柄向量h中的图形中显示图例。 legend(M): 用字符矩阵参量M的每一行字符串作为标签。 legend(h,M): 用字符矩阵参量M的每一行字符串作为标签,给包含于句柄向量h中的相应的图形对象加标签。 legend(M,'parameter_name','parameter_value',…): 用字符矩阵参量M的每一行字符串作为标签,并指定其属性值。 legend(h,M,'parameter_name','parameter_value',…): 用字符矩阵参量M的每一行字符串作为标签,给包含于句柄向量h中的相应的图形对象加标签,并指定其属性值。 legend(axes_handle,…): 给由句柄axes_hanlde指定的坐标轴显示图例。 legend('off')或legend(axes_handle,'off'): 给由句柄axes_hanlde指定的坐标轴显示图例,并关闭标注的内容。 legend('toggle'), legend(axes_handle,'toggle'): 用双位按钮使图例在关闭与显示之间进行切换。 legend('hide'), legend(axes_handle,'hide'): 给由句柄axes_hanlde指定的坐标轴显示图例,并隐藏标注内容。 legend('show'), legend(axes_handle,'show'): 给由句柄axes_hanlde指定的坐标轴显示图例,并显示标注内容。 legend('boxoff'), legend(axes_handle,'boxoff'): 给由句柄axes_hanlde指定的坐标轴显示图例,并关闭标注图例之外的边框。 legend('boxon'), legend(axes_handle,'boxon'): 给由句柄axes_hanlde指定的坐标轴显示图例,并显示标注图例之外的边框。 legend_handle=legend(…): 返回图例的句柄值向量legend_handle。 legend(…,'Location','location'): 在指定的位置location放置图例。 legend(…,'Orientation','orientation'): 在指定的方向orientation放置图例。 【例510】为图形添加修改。 >> clear all; x=0:0.05*pi:2*pi; plot(x,sin(x),'r+',x,cos(x),'b:'); xlabel('x');ylabel('y'); title('sinandcos'); legend('sin','cos'); gtext('sin(x)') gtext('cos(x)'); 运行程序,效果如图512所示。 图512为图形添加修改 5.2.3特殊二维图形 在二维统计分析时常常需要用不同的图形来表示统计结果,如条形图、阶梯图、杆图和填充图等。这时plot函数绘制的图形不能满足这些要求,MATLAB就提供了绘制特殊图形的函数,下面给予介绍。 1. 条形图 在MATLAB中,使用bar和barh函数来绘制条形图,两者的区别是: bar函数用来绘制垂直的条形图,而barh用来绘制水平的条形图。函数的调用格式为: bar(Y): 如果Y为向量,柱状图的高度代表向量Y中每个数据的大小,横坐标即为1到length(Y); 如果Y为矩阵,则把矩阵Y分解成行向量,横坐标为1到Y行数,不同的列以不同的柱状图系列标识,即如果Y为n×m的矩阵,将把Y矩阵分为n组,每组m个列数据的柱状图。 bar(x,Y): 以x为横坐标,绘制数据Y的柱状图,其中x必须为单调递增的向量。 bar(…,width): 参数width用于设置柱状图的宽度,默认值为0.8。如果width设置为1,则条形之间没有间隔; 如果width值大于1,则柱状之间将重合。 bar(…,style): style参数用于设置柱状图的排列类型,默认情况下为group类型。按分组式的方法显示柱状图,当style为Y时,柱状图分为n组,每组有m个垂直柱状; 按照累计式方法显示柱状图,即对于n×m的矩阵Y,每一行向量显示在一个条形中,条形的高度为该行数据的总和,每一列在各柱状图中用不同的颜色标识。 bar(…,bar_color): 定义柱状的颜色为bar_color。 bar(…,Name,Value): 设置柱状图的属性名Name及属性值Value。 bar(axes_handle,…): 根据给定的坐标轴axes_handle绘制柱状图。 h=bar(…): 返回柱状图的句柄值h。 barh函数的调用格式与bar函数类似。 【例511】绘制函数y=e-x2的条形图。 >> clear all; x = -2.9:0.2:2.9; subplot(1,2,1);bar(x,exp(-x.*x),'r'); xlabel(x);ylabel(',exp(-x.*x)'); title('垂直条形图'); subplot(1,2,2);barh(x,exp(-x.*x),'y'); xlabel(x);ylabel(',exp(-x.*x)'); title('水平条形图'); 运行程序,效果如图513所示。 图513条形图 2. 饼形图 在统计学中,经常要使用饼形图来表示各个统计量占总量的份额,饼形图可以显示向量或矩阵中的元素占总体的百分比。在MATLAB中,提供了pie来绘制二维饼形图。函数的调用格式为: pie(X): X是向量,根据X中各分量所占的百分比,绘制出它在整个圆中占的比例。如果向量各元素之和小于1,则只绘制部分圆。 pie(X,explode): 可以把指定的部分从圆形中抽取出来,explode为一个与X长度相同的向量,其中不为零的数所对应的部分,将被抽取出来。 pie(…,labels): 对每个分块添加标注,labels为单元数组,长度与X相同,并且只能用字符串表示。 pie(axes_handle,…): 根据给定的句柄值axes_handle绘制饼形图。 h=pie(…): 返回饼形图的句柄值h。 【例512】根据给定的数据绘制饼形图。 >> clear all; X = [19.3 22.1 51.6; 34.2 70.3 82.4; 61.4 82.9 90.8; 50.5 54.9 59.1;29.4 36.3 47.0]; x = sum(X); explode = zeros(size(x)); [c,offset] = max(x); explode(offset) = 1;%为1时表示与扇形分离,为0时即不分离 h = pie(x,explode); colormap summer %添加颜色效果 图514饼形图 运行程序,效果如图514所示。 3. 极坐标图 在MATLAB中,利用polar函数绘制极坐标图,该函数接受极坐标形式的函数rho=f(θ)。函数的调用格式为: polar(theta, rho): 用极角theta和极径rho画出极坐标图形,其中极角theta为从X轴到半径向量(由弧度定义)的角度大小,极径rho为半径向量的长度(由单位数据空间定义)。 polar(theta, rho, LineSpec): 用LineSpec指定极坐标图中线条类型绘图符号和颜色。 polar(AX,…): 在句柄值为AX的坐标轴中绘制极坐标图。 h=polar(…): 返回极坐标图的句柄值h。 【例513】利用polar绘制极坐标图。 >> clear all; theta = 0:0.01:2*pi; rho = sin(2*theta).*cos(2*theta); figure polar(theta,rho,'--r') 运行程序,效果如图515所示。 图515极坐标图 4. 误差条图 在一条曲线上,可以在数据点的位置包括误差线,方便用户观察此处误差的变化范围。通过errorbar函数绘制沿曲线的误差柱状图,其中,误差柱的长度是数据的置信水平或沿曲线的偏差情况。函数的调用格式为: errorbar(Y,E): 以默认的横坐标绘制数据Y的变化图,同时在数据Y点的上、下方各绘制一段误差线,误差线的长度为相应各点输入参数中的误差E。 errorbar(X,Y,E): X、Y、E必须为同型参量。如果同为向量,在点(X(i),Y(i))处绘制向下长为E,向上长为E的误差图。如果同为矩阵,则在曲面点(X(i,j),Y(i,j))处,绘制出长度为E(i,j)的误差图。 errorbar(X,Y,L,U): X、Y、L和U必须为同型参量。如果同为向量,在点(X(i,j),Y(i,j))处绘制向下长为L(i),向上长为U(i)的误差图; 如果同为矩阵,则在点(X(i,j),Y(i,j))处绘制向下长为L(i,j),向上长为U(i,j)的误差图。 errorbar(…,LineSpec): 用LineSpec设定线型、标记符和颜色等绘制误差图。 h=errorbar(…): 返回误差图的句柄值h。 【例514】绘制误差条图。 >> clear all; x = 0:pi/10:pi; y = sin(x); e = std(y)*ones(size(x)); figure errorbar(x,y,e) 运行程序,效果如图516所示。 图516误差条图 5. 火柴杆图 数据火柴杆图用于反映离散数据点离某一横轴的距离,图形是用垂直于横轴的线条和上端点处的小圆圈(默认点型)或其他点型表示,并在纵轴上标记数据值。在MATLAB中绘制火柴杆图使用stem函数,输入的数据参数可以是向量或矩阵。如果数据为向量,则绘制向量每一个分量的火柴杆图; 如果数据为矩阵,则将矩阵分成行向量绘制每一个分量的火柴杆图。函数的调用格式为: stem(Y): 以X=1,2,3,…为各个数据点的x坐标,以Y向量的各个对应元素为y坐标,在(x, y)坐标点画出一个空心的小圆圈,并连接一条线段到x坐标轴。 stem(X,Y): 以向量X的各个元素为x坐标,以Y向量的各个对应元素为y坐标,在(x, y)坐标点画出一个空心小圆圈,并连接一条线段到x坐标轴。 stem(…,'fill'): 以向量X的各个元素为x坐标,以Y向量的各个对应元素为y坐标,在(x, y)坐标点画出一个实心小圆圈,并连接一条线段到x坐标轴。 stem(…,LineSpec): 以LineSpec确定的线型要素绘制数据的火柴杆图。 stem(axes_handle,…): 在句柄值为axes_handle的坐标轴中绘制火柴杆图。 h=stem(…): 返回火柴杆图的句柄值h。 【例515】绘制火柴杆图。 >> clear all; x = 0:25; y = [exp(-.07*x).*cos(x);exp(.05*x).*cos(x)]'; h = stem(x,y); set(h(1),'MarkerFaceColor','blue') set(h(2),'MarkerFaceColor','red','Marker','square') 运行程序,效果如图517所示。 图517火柴杆图 6. 阶梯图 阶梯图是以一个恒定间隔的边沿显示数据点。在MATLAB中,提供了stairs函数用于绘制阶梯图。函数的调用格式为: stairs(Y): 绘制Y中元素的阶梯图。当Y为向量时,x轴的比例为1~size(Y); 当Y为矩阵时,x轴度量1~Y的行数。 stairs(X,Y): 绘制X与Y的列的阶梯图。X与Y为相同大小的向量或相同大小的矩阵。另外,X可以是行向量或列向量,Y为是一个长度为X的矩阵。 stairs(…,LineSpec): 指定线型、标记和图形颜色。 stairs(…,Name,Value): 设置相应的属性名Name及属性值Value。 stairs(axes_handle,…): 根据指定的axes_handle坐标轴绘制阶梯图。 h=stairs(…): 返回阶梯图的句柄值h。 [xb,yb]=stairs(…): 不绘制图形,但返回向量xb与yb,然后调用plot(xb,yb)绘制阶梯图。 【例516】利用stairs函数绘制阶梯图。 >> clear all; X = linspace(0,1,30)'; Y = [cos(10*X), exp(X).*sin(10*X)]; h = stairs(X,Y); set(h(1),'Marker','o','MarkerSize',4)%根据返回句柄值设置阶梯图的属性 set(h(2),'Marker','o','MarkerFaceColor','m') %根据返回句柄值设置阶梯图的属性 运行程序,效果如图518所示。 图518阶梯图 7. 等高线 等高线经常用来显示多元函数值的变化趋势。MATLAB提供了contour函数和contourf函数用于绘制等高线图,其中,contour函数绘制一般等高线图,contourf函数绘制填充模式的等高线图。函数的调用格式为: contour(Z): 绘制等高线效果图,并给出等高线的高度数据Z。 contour(Z,n): 绘制n条高为Z的等高线。 contour(Z,v): 绘制等高线效果图,其中Z为指定等高线的高度数据,v表示指定高度值处的等高线。 contour(X,Y,Z): 绘制等高线,其中X与Y分别用于指定X轴与Y轴的坐标,Z表示等高线的高度。 contour(X,Y,Z,n): 绘制n条等高线,其中X与Y分别用于指定X轴与Y轴的坐标,Z表示等高线的高度。 contour(X,Y,Z,v): 绘制等高线,其中X与Y分别用于指定X轴与Y轴的坐标,Z表示等高线的高度,v表示指定高度值处的等高线。 contour(…,LineSpec): 指定等高线的线型、点型及颜色。 contour(axes_handle,…): 根据给定的句柄值axes_handle绘制等高线。 [C,h]=contour(…): 返回等高线的颜色矩阵及等高线的句柄值h。 contourf函数调用格式与contour函数调用格式类似。 【例517】利用contour绘制等高线图。 >>clear all; [x,y,z]=peaks(75); %生成坐标刻度数据和高度数据 s(1)=subplot(221); contour(z); title('根据高度数据绘制等高线'); s(2)=subplot(222); contour(x,y,z); title('根据刻度数据与高度数据绘制等高线'); s(3)=subplot(223); contour(x,y,z,4); title('指定等高线数目'); s(4)=subplot(224); contour(x,y,z,linspace(min(z(:)),max(z(:)),12)); title('等间隔指定高度位置'); axis(s,'square'); %设置所有坐标轴为正方形 运行程序,效果如图519所示。 图519等高线图 5.3函数绘图 如果只知道某个函数的表达式,也可以绘制该函数的图形。函数fplot用于绘制一元函数的图形,函数ezplot用于绘制二元函数的图形,函数ezploar用于绘制极坐标图形。下面分别给予介绍。 1. fplot函数 fplot函数根据函数的表达式自动调整自变量的范围,无须给函数赋值,直接生成反映函数变化规律的图形,在函数变化快的区域,采用小的间隔,否则采用大的坐标间隔,使绘制的图形计算量与时间最小,而又能尽可能精确地反映图形的变化。fplot函数一般在对横坐标的取值间隔没有明确要求,仅查看函数大致变化规律的情况下使用。函数的调用格式为: fplot(fun,limits): 在指定范围limits=[a,b,c,d]内画出函数名为fun的一元函数图形,a、b为设定的绘图横轴的下限及上限,c、d是纵轴的下限及上限。 fplot(fun,limits,LineSpec): 用指定的线型LineSpec画出函数fun的图形。 fplot(fun,limits,tol): 用相对误差值tol画出函数fun的画形,相对误差的默认值为2e-3。 fplot(fun,limits,tol,LineSpec): 用指定的相对误差值tol和指定的线型LineSpec画出函数fun的图形。 fplot(fun,limits,n): 当n≥1时,至少画出n+1个点(即至少把范围limits分成n个小区间),最大步长不超过(xmax-xmin)/n。 fplot(fun,lims,tol,n,LineSpec): 允许可选参数tol、n和LineSpec以任意组合方式输入。 [X,Y]=fplot(fun,limits,…): 返回横坐标与纵坐标的值给变量X与Y,此时fplot不画出图形。如需画出图形,可使用plot(X,Y)语句。 【例518】利用fplot函数绘制效果图。 >> clear all; hmp = @humps; subplot(2,1,1);fplot(hmp,[0 1]) sn = @(x) sin(1./x); subplot(2,1,2);fplot(sn,[.01 .1]) 运行程序,效果如图520所示。 图520fplot函数绘制效果图 注意: fplot与plot的区别在于,fplot的指令可以自动地画出一个已定义的函数图形,而无须产生绘图所需要的一组数据作为参数; fplot采用自适应步长控制来画出函数fun的示意图,在函数变化激烈的区间,自动采用小的步长,反之采用大的步长,这样能使计算量与时间最小,并且图形尽可能精确。 2. ezplot函数 函数fplot只能绘制一元函数的图形,在MATLAB中,采用ezplot函数绘制二元函数的图形。该函数不仅能够绘制显函数,还能绘制隐函数。对于显函数y=fun(x),函数的调用格式为: ezplot(fun): 绘制函数fun(x,y)=0的图形,变量x默认为开区间(-2π,2π)。 ezplot(fun,[xmin,xmax]): 该函数的变量x在开区间(a,b)上绘制y=fun(x)的函数。 对于隐函数fun=fun(x,y),函数的调用格式为: ezplot(fun2): 绘制函数fun2(x,y)=0的图形,变量x和变量y都默认为开区间(-2π,2π)。 ezplot(fun2,[xymin,xymax]): 该函数绘制函数fun2(x,y)=0的图形,变量x和y的区间为(xymin,xymax)。 ezplot(fun2,[xmin,xmax,ymin,ymax]): 该函数绘制函数fun2(x,y)=0的图形,变量x的区间为(xmin,xmax),变量y的区间为(ymin,ymax)。 ezplot(funx,funy): 该函数在变量t∈(-2π,2π)上绘制参数函数funx=funx(t)、funy=funy(t)。 ezplot(funx,funy,[tmin,tmax]): 该函数在变量t∈(tmin,tmax)上绘制参数函数funx=funx(t)、funy=funy(t)。 ezplot(…,figure_handle): 该函数在指定图形窗口figure_handle中绘制函数图形,省略时默认为当前图形窗口。 【例519】分别绘出参数函数x=cos5t y=sin3t,t∈[0,2π]与隐函数5x2+25y2=6的图形。 >> clear all; subplot(2,1,1); ezplot('cos(5*t)','sin(3*t)',[0,2*pi]) %绘制参数函数效果图 grid on; subplot(2,1,2); ezplot('5*x^2+25*y^2=6',[-1.5,1.5,-1,1]) %绘制隐函数效果图,并扩展其坐标 grid on; 运行程序,效果如图521所示。 图521参数与隐函数效果图 3. ezpolar函数 在MATLAB中,利用ezpolar函数绘制极坐标系下的图形。函数的调用格式为: ezpolar(fun): 函数在极坐标系中绘制函数rho=fun(theta)的图形,变量theta默认为开区间(0,2π)。 ezpolar(fun,[a,b]): 该函数的变量theta在开区间(a,b)上绘制函数rho=fun(theta)的图形。 ezpolar(axes_handle,…): 在指定的图形窗口坐标系axes_handle中绘制极坐标图形。 【例520】利用ezpolar函数绘制极坐标系下的图形。 >> clear all; subplot(121); ezpolar('sin(2*t).*cos(3*t)',[0 pi]); %极坐标绘图 subplot(122); ezpolar(@(t)sin(3*t),[0 2*pi]); %极坐标绘图 运行程序,效果如图522所示。 图522ezpolar绘图 5.4三维基本绘图 在科学计算可视化过程中,三维空间的立体图是一种非常的手段。因此在这一节中,将要介绍MATLAB中的各种三维绘图函数。三维绘图函数在很多方面与二维绘图类似,其中曲线的属性设置完全相同。 5.4.1三维曲线图 对应于二维空间的plot函数,在三维空间中则是plot3函数。函数的调用格式为: plot3(X1,Y1,Z1,…): 以默认线型属性绘制三维点集(Xi,Yi,Zi)确定的曲线。Xi、Yi、Zi为相同大小的向量或矩阵。 plot3(X1,Y1,Z1,LineSpec,…): 以参数LineSpec确定的线型属性绘制三维点集(Xi,Yi,Zi)确定的曲线,Xi、Yi、Zi为相同大小的向量或矩阵。 plot3(…,'PropertyName',PropertyValue,…): 绘制三维曲线,根据指定的属性值设定曲线的属性。 h = plot3(…): 返回绘制的曲线图的句柄值h。 【例521】利用plot3函数绘制以下参数方程的三维曲线。 x=t y=cost z=sin2t 其实现的MATLAB代码如下: >> clear all; x=0:0.01:50; y=cos(x); z=sin(2*x); plot3(x,y,z,'r-.'); grid on; title('三维曲线'); 运行程序,效果如图523所示。 图523三维曲线图 5.4.2三维网格图 三维网格图和三维曲面图的绘制比三维曲线图的绘制稍显复杂,主要是因为绘图数据的准备及三维图形的色彩、明暗、光照和视角等的处理。绘制函数z=f(x,y)的三维网格图的过程如下。 (1) 确定自变量x和y的取值范围和取值间隔。 x=x1:dx:x2 y=y1:dy:y2 (2) 构成xOy平面上的自变量采样“格点”矩阵。 ① 利用“格点”矩阵的原理生成矩阵。 x=x1:dx:x2; y=y1:dy:y2; X=ones(size(y))*x; Y=y*ones(size(x)); ② 利用meshgrid函数生成“格点”矩阵。 x=x1:dx:x2; y=y1:dy:y2; [X,Y]=meshgrid(x,y); (3) 计算在自变量采样“格点”上的函数值: z=f(x,y)。 在MATLAB中,提供了mesh函数用于绘制三维网格图。函数的调用格式为: mesh(X,Y,Z): 绘制三维网格图,颜色和曲面的高度相匹配,如果X与Y为向量,且length(X)=n,length(Y)=m,[m,n]=size(Z),空间中的点(X(j),Y(i),Z(i,j))为所画曲面网线的交点; 如果X与Y均为矩阵,则空间中的点(X(i,j),Y(i,j),Z(i,j))为所画曲面网线的交点。 mesh(Z): 参数Z是维数为m×n的矩阵,网格曲面的颜色分布与Z方向上的高度值成正比。 mesh(…,C): 参数X、Y、Z都为矩阵值,参数C表示网格曲面的颜色分布情况。 mesh(…,'PropertyName',PropertyValue,…): 对指定的属性PropertyName设置属性值PropertyValue,可以在同一语句中对多个属性进行设置。 h = mesh(…): 返回图形对象的句柄值h。 另外,MATLAB中还有两个mesh的派生函数: (1) meshc在绘制曲面图的同时,在xy平面上绘制函数的等值线。 (2) meshz在曲面图基础上,在图形的底部外侧绘制平行z轴的边框线。 【例522】利用mesh、meshz及meshc绘制三维网格图。 >> clear all; [X,Y] = meshgrid(-3:.125:3); Z = peaks(X,Y); subplot(1,3,1);mesh(X,Y,Z); title(' mesh绘图') axis([-3 3 -3 3 -10 5]) subplot(1,3,2);meshc(X,Y,Z); title('meshc绘图') axis([-3 3 -3 3 -10 5]) subplot(1,3,3);meshz(X,Y,Z); title(' meshz绘图') axis([-3 3 -3 3 -10 5]) set(gcf,'color','w'); 运行程序,效果如图524所示。 图524三维网格图 5.4.3三维曲面图 三维曲面图也可以用来表示三维空间内数据的变化规律,与之前讲述的三维网格图的不同之处在于,对网格的区域填充了不同的色彩。在MATLAB中绘制三维曲面图的函数主要有surf函数、surfc函数、surfl函数。surfl函数用于产生一个带有阴影效果的曲面,该阴影效果是基于环绕、分散、特殊光照等模型得到的。surfc函数是在surf函数的基础上添加曲面的等高线。surfc函数和surfl函数的用法与surf函数类似。surf函数的调用格式为: surf(X,Y,Z): 该函数绘制彩色的三维曲面图,其中矩阵X和Y控制x轴和y轴,矩阵Z为z轴数据。 surf(X,Y,Z,C): 图形的颜色采用参数C设置。 surf(Z)或surf(Z,C): 该函数默认向量x为1:n,向量y为1:m,其中[m,n]=size(Z)。 surf(…,'PropertyName',PropertyValue): 该函数中对图形的一些属性值进行设置。 h=surf(…): 返回三维表面图的句柄值h。 此外,在MATLAB中,采用函数surfc绘制带有等高线的三维曲面图,该函数的调用格式和surf相同。通过函数surfl添加三维曲面的光照效果,该函数和surf函数的调用格式相同。 【例523】利用surf函数,绘制旋转抛物面z=x3+y3的图形。 >> clear all; x=-2:0.05:2; y=-2:0.05:2; [X,Y]=meshgrid(x,y);%生成数据点矩阵X与Y z=X.^3+Y.^3; surf(X,Y,z) %绘制曲面图 grid on; %绘制网格线 shading flat %阴影效果 运行程序,效果如图525所示。 图525三维曲面图 5.4.4特殊三维图形 在科学研究中,有时也需要绘制一些特殊的三维图形,如统计学中三维直方图、圆柱体图、饼形图等。MATLAB中提供了用于绘制这些特殊三维图形的函数,下面通过一个实例来演示特殊三维图形的效果。 【例524】绘制各种特殊三维图形。 >> clear all; t = 0:pi/10:2*pi; [X1,Y1,Z1] = cylinder(2+cos(t)); subplot(231);surf(X1,Y1,Z1) axis square;title('三维柱面图'); subplot(232);sphere axis equal;title('三维球体'); x1 = [1 3 0.5 2.5 2]; explode = [0 1 0 0 0]; subplot(233);pie3(x1,explode) title('三维饼图');axis equal; X2 = [0 1 1 2;1 1 2 2;0 0 1 1]; Y2 = [1 1 1 1;1 0 1 0;0 0 0 0]; Z2 = [1 1 1 1;1 0 1 0;0 0 0 0]; C = [0.5000 1.0000 1.0000 0.5000; 1.0000 0.5000 0.5000 0.1667; 0.3330 0.3330 0.5000 0.5000]; subplot(234);fill3(X2,Y2,Z2,C); colormap hsv title('三维填充图');axis equal; [x2,y2] = meshgrid(-3:.5:3,-3:.1:3); z2 = peaks(x2,y2); subplot(235);ribbon(y2,z2) colormap hsv title('三维彩带图');axis equal; [X3,Y3] = meshgrid(-2:0.25:2,-1:0.2:1); Z3 = X3.* exp(-X3.^2 - Y3.^2); [U,V,W] = surfnorm(X3,Y3,Z3); subplot(236);quiver3(X3,Y3,Z3,U,V,W,0.5); hold on surf(X3,Y3,Z3); colormap hsv view(-35,45); title('三维向量场图');axis equal; set(gcf,'color','w'); %设置背景色为白色 运行程序,效果如图526所示。 图526特殊三维图形(见彩插) 5.5四维绘图 人对自然界的理解和思考是多维的。人的感官不仅善于接受一维、二维、三维的几何信息,而且对几何物体的运动、颜色、声音、气味、触感等反应灵敏。从某种意义上来说,MATLAB色彩控制、动画等指令,为四维或更高维表现提供了手段。 5.5.1用色彩表现函数特征 下面直接通过一个例子来演示色彩表现函数的特征对图形的影响。 【例525】当三维网线图、曲面图的第四个输入变量取一些特殊矩阵时,色彩就能表现或加强函数的某些特征,如梯度、曲率、方向导数等。 >> clear all; x=3*pi*(-1:1/15:1);y=x; [X,Y]=meshgrid(x,y); r=sqrt(X.^2+Y.^2)+eps; Z=sin(r)./r; [dx,dy]=gradient(Z); %计算对r全导数 dz=sqrt(dx.^2+dy.^2); dz2=del2(Z); %计算曲率 subplot(1,2,1);surf(X,Y,Z); title(' surf(X,Y,Z)效果图'); shading faceted, colorbar('horiz'); brighten(0.3); subplot(1,2,2);surf(X,Y,Z,r); title(' surf(X,Y,Z,r)效果图'); shading faceted, colorbar('horiz'); set(gcf,'color','w'); 运行程序,效果如图527所示。 图527色彩表现函数的高度与半径特征效果图(见彩插) 如果想要改变表现函数X方向与Y方向的导数特征,其实现的MATLAB代码如下: >> subplot(1,2,1);surf(X,Y,Z,dz); shading faceted, colorbar('horiz'); brighten(0.25); title('surf(X,Y,Z,dx)X方向特征导数图') subplot(1,2,2);surf(X,Y,Z,dy); shading faceted, colorbar('horiz'); title('surf(X,Y,Z,dy)Y方向特征导数图') 运行程序,效果如图528所示。 图528色彩表现X与Y方向特征导数图(见彩插) 如果想要用色彩表现函数的径向导数与曲率特征,其实现的MATLAB代码如下: >> subplot(1,2,1);surf(X,Y,Z,abs(dz)); shading faceted, colorbar('horiz'); brighten(0.5); title('surf(X,Y,Z,abs(dz))径向导数图') subplot(1,2,2);surf(X,Y,Z,dz2); shading faceted, colorbar('horiz'); title('surf(X,Y,Z,dz2)曲率图') 运行程序,效果如图529所示。 图529色彩表现函数的径向导数与曲率特征效果图(见彩插) 5.5.2切片图与切片等位线图 前面介绍的用色彩表现函数特征绘制效果,仅仅表现出了三维函数的某些特征,还不能充分表现出四维图形的效果。在MATLAB中提供了meshgrid、slice、contourslice函数,可充分表现四维图形的效果。meshgrid函数在5.4.2节中已经介绍过,下面只对后面两个函数进行简单的介绍。 1. slice函数 函数slice用于绘制三维切片图。三维切片图可形象地称为“四维图”,可以在三维空间内表达第四维的信息,用颜色来标识第四维数据的大小。函数的调用格式为: slice(V, sx, sy, sz): 绘制立体V在X轴、Y轴、Z轴方向上与sx、sy、sz向量所对应点的切片图,其中V为m×n×p的三维立体数组,包含在默认X=1∶n、Y=1∶m与Z=1∶p位置上的数据值。sx、sy、sz向量的每一个元素定义了一个切片面在X轴、Y轴、Z轴的方向。 slice(X, Y, Z, sx, sy, sz): 绘制立体V在X轴、Y轴、Z轴方向上与sx、sy、sz向量所对应点的切片图。X、Y、Z为三维数组,用于指定立体体积数据V的坐标,V为一个m×n×p的数组,并且X、Y、Z必须为单调且正交间隔的数组(与使用函数meshgrid的结果一样)。每点的颜色是由对立体V进行三维内插所确定的。 slice(V, X1, Y1, Z1): 在立体V中绘制矩阵X1、Y1、Z1所定义的切面图。X1、Y1、Z1定义一个曲面,同时在曲面点上计算立体V的值。X1、Y1、Z1必须为大小相同的矩阵。 slice(X,Y, Z, V, X1, Y1, Z1): 沿着由数组X1、Y1、Z1定义的曲面绘制穿过立体V的切片。 slice(…, 'method'): 指定内插的方法。method为以下方法之一。  'linear': 使用三次线性内插法(默认值)。  'cubic': 使用三次立方内插法。  'nearest': 使用邻近最近点内插法。 slice(axes_handle,…): 在句柄值为axes_handle的坐标轴中绘制立体切片图。 h=slice(…): 返回组成立体切片图的surface图形对象句柄值h,因此可通过类似设置surface对象属性的做法来控制立体的切片图。 【例526】利用slice函数绘制无限大小水体中水下射流速度数据flow。 >> clear all; [X,Y,Z,V]=flow;%取4个(50×25×25)的射流数据矩阵,%V是射流速度 x1=min(min(min(X))); x2=max(max(max(X))); %取X坐标上下限 y1=min(min(min(Y))); y2=max(max(max(Y))); %取Y坐标上下限 z1=min(min(min(Z))); z2=max(max(max(Z))); %取Z坐标上下限 sx=linspace(x1+1.5,x2,5); %确定5个垂直X轴的切面坐标 sy=0; %在y=0处,取垂直Y轴的切面 sz=0; %在z=0处,取垂直Z轴的切面 slice(X,Y,Z,V,sx,sy,sz); view([-38,38]); shading interp; colormap jet; set(gcf,'color','w'); 运行程序,效果如图530所示。 图530切片效果图(见彩插) 2. contourslice函数 contourslice函数用来实现三元函数切面等高线的效果图。函数的调用格式为: contourslice(X,Y,Z,V,Sx,Sy,Sz): X、Y、Z是维数为m×n×p的自变量“格点”数组; V是与X、Y、Z同维的函数值数组; Sx、Sy、Sz是决定切片位置的数值向量。假如取“空阵”,就表示不取切片。 【例527】使用contourslice函数进行flow设置,说明飞机上使用切片轮廓数据的效果。 >> clear all; [x y z v] = flow; h = contourslice(x,y,z,v,[1:9],[],[0],linspace(-8,2,10)); axis([0,10,-3,3,-3,3]); daspect([1,1,1]); camva(24); camproj perspective; campos([-3,-15,5]); set(gcf,'Color',[.5,.5,.5],'Renderer','zbuffer'); set(gca,'Color','black','XColor','white', 'YColor','white','ZColor','white'); colormap jet; colorbar; box on; set(gcf,'color','w'); 运行程序,效果如图531所示。 图531切片等位线效果图(见彩插)