资源预览内容
第1页 / 共100页
第2页 / 共100页
第3页 / 共100页
第4页 / 共100页
第5页 / 共100页
第6页 / 共100页
第7页 / 共100页
第8页 / 共100页
第9页 / 共100页
第10页 / 共100页
亲,该文档总共100页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第三章第三章 数据与函数的作图数据与函数的作图n n本章导读本章导读本章导读本章导读n n作图功能是作图功能是作图功能是作图功能是MATLABMATLAB的特长之一,的特长之一,的特长之一,的特长之一,MATLABMATLAB提供高端和低端作提供高端和低端作提供高端和低端作提供高端和低端作图命令,我们可以非常方便地将数据绘制成二维、三维的图形,图命令,我们可以非常方便地将数据绘制成二维、三维的图形,图命令,我们可以非常方便地将数据绘制成二维、三维的图形,图命令,我们可以非常方便地将数据绘制成二维、三维的图形,而高端命令可以让我们随心所欲地画出各种函数图形。作图分为而高端命令可以让我们随心所欲地画出各种函数图形。作图分为而高端命令可以让我们随心所欲地画出各种函数图形。作图分为而高端命令可以让我们随心所欲地画出各种函数图形。作图分为两大类,一类是数据作图,如给定数组两大类,一类是数据作图,如给定数组两大类,一类是数据作图,如给定数组两大类,一类是数据作图,如给定数组x x,y y作数据的图形。一作数据的图形。一作数据的图形。一作数据的图形。一类是给一个函数直接作图,如做的图形。事实上图形正在演变成类是给一个函数直接作图,如做的图形。事实上图形正在演变成类是给一个函数直接作图,如做的图形。事实上图形正在演变成类是给一个函数直接作图,如做的图形。事实上图形正在演变成一种语言,它可以用更直观的形式展示问题的内涵。一种语言,它可以用更直观的形式展示问题的内涵。一种语言,它可以用更直观的形式展示问题的内涵。一种语言,它可以用更直观的形式展示问题的内涵。 在数学建在数学建在数学建在数学建模竞赛中,我们的论文广泛使用图文并茂的形式,可以更好地说模竞赛中,我们的论文广泛使用图文并茂的形式,可以更好地说模竞赛中,我们的论文广泛使用图文并茂的形式,可以更好地说模竞赛中,我们的论文广泛使用图文并茂的形式,可以更好地说明解决问题的思路。特别是在国际数学建模竞赛明解决问题的思路。特别是在国际数学建模竞赛明解决问题的思路。特别是在国际数学建模竞赛明解决问题的思路。特别是在国际数学建模竞赛MCMMCM、ICMICM中,中,中,中,由于中国学生的语言表达能力,特别是书面表达能力不如以英语由于中国学生的语言表达能力,特别是书面表达能力不如以英语由于中国学生的语言表达能力,特别是书面表达能力不如以英语由于中国学生的语言表达能力,特别是书面表达能力不如以英语为母语的美国、英国、澳大利亚的等国家,因此在论文中多插图为母语的美国、英国、澳大利亚的等国家,因此在论文中多插图为母语的美国、英国、澳大利亚的等国家,因此在论文中多插图为母语的美国、英国、澳大利亚的等国家,因此在论文中多插图形往往可以收到事半功倍的效果。形往往可以收到事半功倍的效果。形往往可以收到事半功倍的效果。形往往可以收到事半功倍的效果。n nMATLABMATLAB作图功能十分强大,在三维作图中甚至物体在视角、作图功能十分强大,在三维作图中甚至物体在视角、作图功能十分强大,在三维作图中甚至物体在视角、作图功能十分强大,在三维作图中甚至物体在视角、光线以及材质上都能反映出来。我们将介绍图形的基本概念,以光线以及材质上都能反映出来。我们将介绍图形的基本概念,以光线以及材质上都能反映出来。我们将介绍图形的基本概念,以光线以及材质上都能反映出来。我们将介绍图形的基本概念,以及用构架数组描述图形的机理,一些基本的命令和方法,其他命及用构架数组描述图形的机理,一些基本的命令和方法,其他命及用构架数组描述图形的机理,一些基本的命令和方法,其他命及用构架数组描述图形的机理,一些基本的命令和方法,其他命令可以举一反三。在本章的后半部分介绍图形界面的产生,可视令可以举一反三。在本章的后半部分介绍图形界面的产生,可视令可以举一反三。在本章的后半部分介绍图形界面的产生,可视令可以举一反三。在本章的后半部分介绍图形界面的产生,可视化方法产生图形界面的方法。利用可视化界面可以让我们构造一化方法产生图形界面的方法。利用可视化界面可以让我们构造一化方法产生图形界面的方法。利用可视化界面可以让我们构造一化方法产生图形界面的方法。利用可视化界面可以让我们构造一个实验环境,对研究和探讨问题有一定的帮助。个实验环境,对研究和探讨问题有一定的帮助。个实验环境,对研究和探讨问题有一定的帮助。个实验环境,对研究和探讨问题有一定的帮助。 3.1 作图命令的搜索作图命令的搜索在界面上点击在界面上点击help功能,然后进行功能,然后进行plot关键字的搜索见图关键字的搜索见图3.1.1在这里列出了几乎所有和在这里列出了几乎所有和plot有关的图形命令,单击任何你需要的有关的图形命令,单击任何你需要的命令,在右边的窗口中可以看到该命令的语法、使用方法和一些示命令,在右边的窗口中可以看到该命令的语法、使用方法和一些示例。例如打开例。例如打开plot,下面的例子初步展示,下面的例子初步展示MATLAB作离散图和连作离散图和连续图的例子。续图的例子。【例【例3.1.1】打开】打开plot,我们可以看到有关,我们可以看到有关plot的语法说明,实例的语法说明,实例等。见图等。见图根据帮助功能我们就可以方便地编程,例如作函数的图形,这里用根据帮助功能我们就可以方便地编程,例如作函数的图形,这里用数据作图。数据作图。x = -pi:pi/10:pi; % 产生自变量数组产生自变量数组x(-pi,pi)y = tan(sin(x) - sin(tan(x); % 产生相应因变量点的数组产生相应因变量点的数组yplot(x,y,-rs,LineWidth,2, MarkerEdgeColor,k,. MarkerFaceColor,g,.MarkerSize,10) % 作数据作数据x,y的图形,并定义线的颜色、点的形状等。的图形,并定义线的颜色、点的形状等。【例【例3.1.2】用图形表示连续调制波形。】用图形表示连续调制波形。t1=(0:11)/11*pi;% 产生产生12个自变量的点个自变量的点y1=sin(t1).*sin(9*t1); t2=(0:100)/100*pi; 产生产生101个自变量的点个自变量的点y2=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) 【例【例3.1.4】用曲面图表现函数。首先取】用曲面图表现函数。首先取x,y轴的点,利用轴的点,利用meshgrid命令产生命令产生x-y平面的网格点,在每个网格点上计算函数平面的网格点,在每个网格点上计算函数的值。的值。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) %用来表现用来表现在格点上计算函数值在格点上计算函数值3.2 图形基本概念和图形设置命令图形基本概念和图形设置命令3.2.1 图形基本概念图形基本概念 图形事实上是我们使用计算机命令在计算机屏幕图形事实上是我们使用计算机命令在计算机屏幕root上绘制的各种对象上绘制的各种对象object的组合,这些对象的组合,这些对象包括图形显示框及其子对象,如各种菜单、各种工具图标包括图形显示框及其子对象,如各种菜单、各种工具图标和正方形的空白绘图显示区,以及在这个区域中用和正方形的空白绘图显示区,以及在这个区域中用plot、surf等命令作出的图形对象、颜色对象、光线对象、注释等命令作出的图形对象、颜色对象、光线对象、注释对象等等。众多的对象组成的有机体形成了特色鲜明的计对象等等。众多的对象组成的有机体形成了特色鲜明的计算机图形。下面我们列出主要的对象及其注释,见表算机图形。下面我们列出主要的对象及其注释,见表3.2.1 对象是分层次的,在一个图形中有父对象、子对象、兄妹对象等。如对象是分层次的,在一个图形中有父对象、子对象、兄妹对象等。如Root是是Fiugre的父对象,的父对象,Image是是Figure的孙对象,而的孙对象,而Axes和和Uicontrol等是同辈对象。等是同辈对象。此图形结构可以用构架数组来表示,如此图形结构可以用构架数组来表示,如MATLAB特有的句柄构架数组特有的句柄构架数组handle structure)。典型的层次见图)。典型的层次见图3.2.1 在一个图形中除了图形本身外还有各种修饰命令,例如图形的标题、坐标的名称、线在一个图形中除了图形本身外还有各种修饰命令,例如图形的标题、坐标的名称、线条的颜色和粗细,在三维图形中还要考虑立体光线等等。合理地使用这些修饰命令将使我条的颜色和粗细,在三维图形中还要考虑立体光线等等。合理地使用这些修饰命令将使我们的图形更好看,更具说服力。下例是由多个对象组成的图形。们的图形更好看,更具说服力。下例是由多个对象组成的图形。3.2.2 图形各目标的设置命令图形各目标的设置命令set和信息传递命令和信息传递命令get当我们用高端作图命令如当我们用高端作图命令如plot、surf进行作图时,实际是调进行作图时,实际是调用个图形的构架数组。包括图形框架、菜单、工具图标、用个图形的构架数组。包括图形框架、菜单、工具图标、坐标、图形背景颜色以及图形等等各种层次对象坐标、图形背景颜色以及图形等等各种层次对象objects)。有关这些对象的设置都是系统内定的值,如)。有关这些对象的设置都是系统内定的值,如果想改变某一个对象的属性的值,使用果想改变某一个对象的属性的值,使用set命令来重新设命令来重新设置。置。 在一个图形界面上对各对象之间进行信息传递,可以用在一个图形界面上对各对象之间进行信息传递,可以用get命令获取某窗口中的信息。命令获取某窗口中的信息。先介绍图形句柄的概念。我们来看几个术语:先介绍图形句柄的概念。我们来看几个术语:gcf:为当前图形句柄:为当前图形句柄current figure handle),即),即获得由作图命令产生的图获得由作图命令产生的图3.2.1的图形层次结构。的图形层次结构。 gca:为图形当前的坐标系统(:为图形当前的坐标系统( the handle to the current axes)。)。设置图形参数命令设置图形参数命令set的语法和获取属性信息的命令的语法和获取属性信息的命令get:set(H,PropertyName,PropertyValue,.) % 对句柄对句柄H各种属性重新设置各种属性重新设置set(H,a) % 和上面命令等价,而将参数全部放入构架数组和上面命令等价,而将参数全部放入构架数组aset(H,pn,pv.) % 和上面命令等价,而将参数全部放入元胞数组和上面命令等价,而将参数全部放入元胞数组pn和和pvset(H,pn,) % 对多个句柄进行同时设置对多个句柄进行同时设置a= set(h) % 对象对象h的属性和值放到构架数组的属性和值放到构架数组a中中a= get(0,Factory) % 将当前整个句柄所有属性的值放到构架数组将当前整个句柄所有属性的值放到构架数组a中中a= get(0,FactoryObjectTypePropertyName) % 将当前句柄的某个属性和值放入将当前句柄的某个属性和值放入a中中a= set(h,Default) % 将对象将对象h的内定值放到构架数组中的内定值放到构架数组中a= set(h,DefaultObjectTypePropertyName) % 将某个属性放到构架数组中将某个属性放到构架数组中 = set(h,PropertyName) % 将某个属性值放到元胞数组中将某个属性值放到元胞数组中H:为句柄,如:为句柄,如gcf、gca等等。等等。PropertyName:为该句柄下的属性名,如线型、点的颜色等。:为该句柄下的属性名,如线型、点的颜色等。PropertyValue:一个属性名的值,如线型实线或虚线等,点可:一个属性名的值,如线型实线或虚线等,点可以取红、蓝等等。以取红、蓝等等。a:为一个构架数组,用于存放参数:为一个构架数组,用于存放参数PropertyName,PropertyValue,.,当参数很多时用构架数组进,当参数很多时用构架数组进行说明较为方便。行说明较为方便。pn:为元胞数组,存放各种属性名:为元胞数组,存放各种属性名PropertyName1,PropertyName2,vp:为元胞数组,存放各种属性名相应的值:为元胞数组,存放各种属性名相应的值PropertyValue1,PropertyValue2,【例【例3.2.1】作两幅图,并用】作两幅图,并用set命令重设一些属性,用命令重设一些属性,用get显示属显示属性的改变。性的改变。x=linspace(-pi,pi,10);y=sin(x)subplot(1,2,1),h=plot(x,y) % 用系统内定的参数作图用系统内定的参数作图a= get(h) % 显示图形的每种特性的参数显示图形的每种特性的参数subplot(1,2,2),h=plot(x,y) set(h,LineStyle,-,LineWidth,1,Marker,d)b=get(h) % 显示修改过的特性的参数显示修改过的特性的参数属性参数为:属性参数为:b = BeingDeleted: off BusyAction: queue ButtonDownFcn: Children: 0x1 double Clipping: onColor: 0 0 1 CreateFcn: DeleteFcn: EraseMode: normal HandleVisibility: on HitTest: on Interruptible: on LineStyle: - % 已改变已改变 LineWidth: 1 % 已改变已改变 Marker: diamond % 已改变已改变 MarkerEdgeColor: auto MarkerFaceColor: none MarkerSize: 6 Parent: 150.0005 Selected: off SelectionHighlight: on Tag: Type: line UIContextMenu: UserData: Visible: on XData: 1x10 double YData: 1x10 double ZData: 1x0 double【例【例3.2.2】对于例】对于例3.2.1可以用构架数组来改变特性的参数,以可以用构架数组来改变特性的参数,以下程序可以获得一样的结果。下程序可以获得一样的结果。x=linspace(-pi,pi,10);y=sin(x)subplot(1,2,1),h=plot(x,y) % 用系统内定的参数作图用系统内定的参数作图a= get(h)subplot(1,2,2),h=plot(x,y) b=get(h)act.LineStyle=-; % 定义构架数组中线形的参数定义构架数组中线形的参数act.LineWidth=1; % 定义构架数组中线宽的参数定义构架数组中线宽的参数act.Marker=d; % 定义构架数组中点型的参数定义构架数组中点型的参数set(h,act)set和和get命令在作图,特别是以后介绍的界面设计中起着关键性命令在作图,特别是以后介绍的界面设计中起着关键性的作用,在后面的部分还有介绍。进一步的学习可查阅的作用,在后面的部分还有介绍。进一步的学习可查阅help中的中的set和和get的关键字。的关键字。3.3 数据二维作图和图形编辑数据二维作图和图形编辑3.3.1 二维作图二维作图 表表3.2.1列出了作图的大概步骤列出了作图的大概步骤 【例【例3.3.1】以我国国民生产总值的数据为例,进行作图和拟合】以我国国民生产总值的数据为例,进行作图和拟合研究,首先作出数据的图形,然后我们进行拟合的各种实验,从研究,首先作出数据的图形,然后我们进行拟合的各种实验,从中找出满意的结果。中找出满意的结果。A=load(e:datazggdp.txt) % 定义定义n行两列的时间序列数组行两列的时间序列数组x=A(:,1) % 将时间定义为数组将时间定义为数组xy=A(:,2) % 将将gdp国民生产总值定义为国民生产总值定义为yplot(x,y,r*) % 将数据点用红色,将数据点用红色,*形绘制图形形绘制图形结果我们可以看界面图结果我们可以看界面图3.3.1打开界面菜单打开界面菜单Tools,并点击,并点击Basic Fitting 我们就可以看到以下我们就可以看到以下界面。界面。见图见图3.3.2 在在Basic Fitting栏下我们可以选择各种拟合方法,选择线性栏下我们可以选择各种拟合方法,选择线性linear和和7阶多项式进阶多项式进行拟合。对作残差图行拟合。对作残差图Plot residuals进行勾选,表示要做残差分析。我们可以明显地看进行勾选,表示要做残差分析。我们可以明显地看出出7阶多项式拟合明显好与线性拟合。在第二张图形上显示了两种拟合的残差,残差图更阶多项式拟合明显好与线性拟合。在第二张图形上显示了两种拟合的残差,残差图更证明了我们的判断。见图证明了我们的判断。见图3.3.3二维图形的编辑与完善二维图形的编辑与完善 另一方法是直接在图形窗口上对图形进行编辑。另一方法是直接在图形窗口上对图形进行编辑。一、用图形修饰命令对图形进行编辑一、用图形修饰命令对图形进行编辑用命令来完整地修饰图形,事实上是编一套程序,其具体格用命令来完整地修饰图形,事实上是编一套程序,其具体格式为:式为:作图命令(作图命令( 数据,子命令,子命令,数据,子命令,子命令,子命令,子命令 )修饰命令修饰命令1修饰命令修饰命令2 修饰命令修饰命令n以下将二维作图的曲线线型选择和颜色选择命令罗列为表以下将二维作图的曲线线型选择和颜色选择命令罗列为表3.3.2 点的颜色、点边界的颜色、点的大小设置等见表点的颜色、点边界的颜色、点的大小设置等见表3.3.3 点型的选择见表点型的选择见表3.3.4 图形标注辅助修饰命令与图形子命令不同,它不在图形命令内,而是作为独立的命令图形标注辅助修饰命令与图形子命令不同,它不在图形命令内,而是作为独立的命令紧跟在图形命令后面。主要的图形辅助修饰命令见表紧跟在图形命令后面。主要的图形辅助修饰命令见表3.3.5【例【例3.3.2】利用上面的修饰命令作一个完的整修饰图形,图形标】利用上面的修饰命令作一个完的整修饰图形,图形标题为题为“我的完善图我的完善图”。x = -pi:pi/10:pi;y = tan(sin(x) - sin(tan(x); %准备数据准备数据%作曲线图,曲线设为虚线,线宽为作曲线图,曲线设为虚线,线宽为2,红颜色。点的边界为黑色,红颜色。点的边界为黑色,点面色为绿色,点面色为绿色,%点的大小设为点的大小设为10。plot(x,y,-rs,LineWidth,2,. MarkerEdgeColor,k,. MarkerFaceColor,g,. MarkerSize,10); legend(tan(sin(x)-sin(tan(x),1) % 在图内标注公式在图内标注公式xlabel(时间时间) % 坐标坐标x标为时间标为时间ylabel(函数函数) % 坐标坐标y标为函数标为函数 title(我的完善图我的完善图) % 图形标题注为图形标题注为“我的完善图我的完善图”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,fontsize16leftarrowitsin(t)fontname隶书隶书极大值极大值) 二、在窗口界面上对图形进行直接修饰二、在窗口界面上对图形进行直接修饰 利用命令进行修饰的大部分功能可以更方便、更直观地利用窗口利用命令进行修饰的大部分功能可以更方便、更直观地利用窗口编辑功能进行。免去了编程步骤。我们以下面的例子来说明。编辑功能进行。免去了编程步骤。我们以下面的例子来说明。【例【例3.3.4】用窗口编辑功能对图形进行修饰。首先仅将图形简单】用窗口编辑功能对图形进行修饰。首先仅将图形简单绘出。绘出。t=0:pi/50:2*pi;y=sin(t);plot(t,y)进入编辑状态进入编辑状态对图形加文字对图形加文字在图形中加箭头在图形中加箭头 在编辑状态下我们选定曲线,即用鼠标单击曲线的任何部位,这时我们可以看见该曲在编辑状态下我们选定曲线,即用鼠标单击曲线的任何部位,这时我们可以看见该曲线对象变为当前状态。见图线对象变为当前状态。见图3.3.7双击该曲线,我们就可以看到设置曲线的界面,如图双击该曲线,我们就可以看到设置曲线的界面,如图3.3.8在这里我们可以设置曲线的类型如实线、各类虚线,线宽,颜色等,还可以设置点的类型、在这里我们可以设置曲线的类型如实线、各类虚线,线宽,颜色等,还可以设置点的类型、大小、边界颜色和点的颜色等等。现在我们来设置一下,同时加入一些注释,其效果图见大小、边界颜色和点的颜色等等。现在我们来设置一下,同时加入一些注释,其效果图见图图3.3.93.4 数据三维图形绘制和各种修饰数据三维图形绘制和各种修饰 三维图形为立体图形,和二维图形有了本质的不同。三维图形为立体图形,和二维图形有了本质的不同。(1) 三维图形有了视角的概念,不同的视角对于同一物体会产生不同的视觉效果,因此必三维图形有了视角的概念,不同的视角对于同一物体会产生不同的视觉效果,因此必须有刻画视角的须有刻画视角的view修饰命令。修饰命令。(2) 光线的照射角度也会对物体的视觉效果产生影响,因此必须有刻画光线照射角度的命光线的照射角度也会对物体的视觉效果产生影响,因此必须有刻画光线照射角度的命令。令。(3) 颜色的设置也会对视觉产生影响,因此要有刻画颜色的命令。颜色的设置也会对视觉产生影响,因此要有刻画颜色的命令。(4) 对于一个空间的物体,我们不但需要从外观上了解它的性状,同时需要对它的横截面对于一个空间的物体,我们不但需要从外观上了解它的性状,同时需要对它的横截面进行了解。例如利用磁共振方法我们可以得到人的大脑的数据,我们可以利用解剖图来检进行了解。例如利用磁共振方法我们可以得到人的大脑的数据,我们可以利用解剖图来检查脑部是否有病变,因此我们还需要有能够进行切片的命令查脑部是否有病变,因此我们还需要有能够进行切片的命令slice来描述这样的情况。来描述这样的情况。MATLAB为我们提供了丰富的立体修饰命令,因此三维作图的内容多也较二维图形复杂为我们提供了丰富的立体修饰命令,因此三维作图的内容多也较二维图形复杂的多。的多。3.4.1 三维图形的绘制三维图形的绘制 MATLAB为我们提供了各种三维数据的曲面作图命令,它们可以作空间的曲线、空为我们提供了各种三维数据的曲面作图命令,它们可以作空间的曲线、空间的曲面、等高线图、各种方向上的投影图、空间的散点图等等。这些命令都是高端命令,间的曲面、等高线图、各种方向上的投影图、空间的散点图等等。这些命令都是高端命令,既可以根据数据矩阵作图,又可以根据函数进行作图。现将主要命令列表如下:既可以根据数据矩阵作图,又可以根据函数进行作图。现将主要命令列表如下: 尽管三维图形的修饰命令比较多,然而其基本步骤和二维图形还是差不多的。表尽管三维图形的修饰命令比较多,然而其基本步骤和二维图形还是差不多的。表3.4.2列出了三维作图的基本步骤。列出了三维作图的基本步骤。 MATLAB中提供了很多实际例子的数据,这些例子都是广泛流行的教材中的实例,中提供了很多实际例子的数据,这些例子都是广泛流行的教材中的实例,为我们理解和学习提供了方便。如美国人口从为我们理解和学习提供了方便。如美国人口从1900年到年到1970的普查数据,的普查数据,peaks峰峰函数数据)、函数数据)、wind风向数据)、风向数据)、mri脑部磁共振数据等。下面我们来看一些实例。脑部磁共振数据等。下面我们来看一些实例。 【例【例3.4.1】利用】利用plot3命令,对极坐标三维数据作空间曲线图。命令,对极坐标三维数据作空间曲线图。t = 0:pi/50:10*pi;plot3(t.*sin(t),t.*cos(t),t,LineWidth,2) % 作空间曲线图,线宽为作空间曲线图,线宽为2axis square; grid on % x,y,x坐标的比例是相等的坐标的比例是相等的peaks是是MATLAB提供的一个产生提供的一个产生peaks函数数据的命令,它可以根据用户的要求产生函数数据的命令,它可以根据用户的要求产生peaks数据点的稀密程度,从而产生精确度不同视觉效果的图形。数据点的稀密程度,从而产生精确度不同视觉效果的图形。【例【例3.4.2】利用】利用MATLAB给定的数据矩阵给定的数据矩阵peaks作立体图。作立体图。X,Y,Z = peaks(50); % 用用peaks函数产生函数产生5050的的X-Y面上的点,并计算面上的点,并计算Zsurfc(X,Y,Z) % 用数据用数据X,Y,Z产生曲面图形和等高线图产生曲面图形和等高线图colormap hsv % 对图形着色对图形着色 axis(-3 3 -3 3 -10 5) % 给出作图的坐标范围给出作图的坐标范围注意,有关图形的其他修饰上面的程序没有写出,如图形的视角、光线的设置、曲面表面注意,有关图形的其他修饰上面的程序没有写出,如图形的视角、光线的设置、曲面表面的性质、曲面的材质等等,这时计算机对这些对象有一个系统内定值或者称为缺省。的性质、曲面的材质等等,这时计算机对这些对象有一个系统内定值或者称为缺省。【例【例3.4.3】人体头部磁共振数据】人体头部磁共振数据mri为为MATLAB提供的案例数据,它是大脑内部结构提供的案例数据,它是大脑内部结构的影像数据。数据结构为四维的影像数据。数据结构为四维128128127数组,其中最后的维数是按数组,其中最后的维数是按z轴对轴对脑部切片的脑部切片的27幅横截面映像图。我们可以从各个角度、内部和外部来窥视这批数据。本幅横截面映像图。我们可以从各个角度、内部和外部来窥视这批数据。本例只是观看该多维数据的外表,并显示对数据的平滑和光线的处理并作图。例只是观看该多维数据的外表,并显示对数据的平滑和光线的处理并作图。load mri % 读入脑磁共振数据并放如数组读入脑磁共振数据并放如数组D中中D = squeeze(D); % 抽去抽去D中第三维,数据变为立体数据中第三维,数据变为立体数据12812827)Ds = smooth3(D); % 对数据进行平滑处理对数据进行平滑处理hcap = patch(isocaps(D,5),. % 对脑上部用一片横截面盖住,对颜色进行插值对脑上部用一片横截面盖住,对颜色进行插值平滑。平滑。 FaceColor,interp,. EdgeColor,none);hiso = patch(isosurface(Ds,5),. % 对脑周围数据建立外表面,并着色。对脑周围数据建立外表面,并着色。 FaceColor,1,.75,.65,. EdgeColor,none);view(45,30) % 建立视角建立视角axis tight % 设置坐标为紧凑参数值设置坐标为紧凑参数值daspect(1,1,.4) % 对坐标设置适当的比率对坐标设置适当的比率lightangle(45,30); % 定义光源的角度定义光源的角度set(gcf,Renderer,zbuffer); lighting phong % 对当前图形句柄进行设置对当前图形句柄进行设置isonormals(Ds,hiso) % 计算数据边缘的模计算数据边缘的模 set(hcap,AmbientStrength,.6) % 设置头顶部参数设置头顶部参数set(hiso,SpecularColorReflectance,0,SpecularExponent,50); % 设置设置表面的参数表面的参数3.4.2 图形颜色命令图形颜色命令colormap 现在我们开始学习图形修饰命令,三维图形修饰命令十分丰富,包括对图形上色、现在我们开始学习图形修饰命令,三维图形修饰命令十分丰富,包括对图形上色、设置图形的视角、对图形进行平滑处理、设置图形目标的材质等等。设置图形的视角、对图形进行平滑处理、设置图形目标的材质等等。我们面对的是一个平面的屏幕,何以能显示一个立体的图形呢?例如我们在纸上画一个球。我们面对的是一个平面的屏幕,何以能显示一个立体的图形呢?例如我们在纸上画一个球。首先用圆规画一个圆,然后根据光学和透视原理在圆中画上深浅不同的色彩,这时我们就首先用圆规画一个圆,然后根据光学和透视原理在圆中画上深浅不同的色彩,这时我们就可以在平面的纸上看出一个逼真的球形了。同样的道理,计算机显示一个立体物,除了给可以在平面的纸上看出一个逼真的球形了。同样的道理,计算机显示一个立体物,除了给定的数据点组成的图形框架外,还对每一数据点映射一个颜色,或者说在作图时每个数据定的数据点组成的图形框架外,还对每一数据点映射一个颜色,或者说在作图时每个数据矩阵对应一个颜色矩阵,我们就可以作出形象逼真的立体彩色图形了。颜色矩阵是矩阵对应一个颜色矩阵,我们就可以作出形象逼真的立体彩色图形了。颜色矩阵是3列列n行的,它对应行的,它对应n个数据点。个数据点。colormap就是对数据点加载某种颜色矩阵的函数,其示意图如下:就是对数据点加载某种颜色矩阵的函数,其示意图如下: 数据矩阵数据矩阵DM 颜色矩阵颜色矩阵CMcolormap(CM)这里,颜色矩阵的元素为界于这里,颜色矩阵的元素为界于0和和1之间的实数,因此颜色矩阵之间的实数,因此颜色矩阵CM的每一行都是由红、绿、的每一行都是由红、绿、蓝调成的某种颜色。例如:表蓝调成的某种颜色。例如:表3.4.3列出了部分颜色数据的调色结果。列出了部分颜色数据的调色结果。【例【例3.4.4】利用】利用colormap命令选择颜色趋势。读入液体流出的数据命令选择颜色趋势。读入液体流出的数据(1) 取灰色取灰色load flujetimage(X)colormap(gray)(2colormap选择参数为选择参数为jetload flujetimage(X)colormap(jet)3.4.3 图形的视角选择图形的视角选择view 图形的视角可以很好地刻画从某个位置观察一个立体的图形,我们知道从不同的角图形的视角可以很好地刻画从某个位置观察一个立体的图形,我们知道从不同的角度看立体物体可以得到不同的图形感观,这个视角命令为度看立体物体可以得到不同的图形感观,这个视角命令为view。而视角还包括观察距离。而视角还包括观察距离的远近,这个命令为的远近,这个命令为zoom。从不同的视角观察物体,我们的视角事实上只要两个参数,。从不同的视角观察物体,我们的视角事实上只要两个参数,即水平旋转角和升降旋转角。因此视角的一般形式为:即水平旋转角和升降旋转角。因此视角的一般形式为:view(az,el)view(az,el)view(x,y,z)这里这里az为为azimuth水平旋转角度,水平旋转角度,el为为elevation上下旋转角度,而上下旋转角度,而view(x,y,z)为在向量方向为在向量方向(x, y, z)上的视角。上的视角。我们来看以下示意图。我们来看以下示意图。【例【例3.4.5】当我们不使用】当我们不使用view命令时,系统有一个内定的视角,命令时,系统有一个内定的视角, 即即view(-37.5,30),本例给出四个不同的角度的图形。,本例给出四个不同的角度的图形。X,Y = meshgrid(-2:.25:2); Z = X.*exp(-X.2 -Y.2);subplot(2,2,1),surf(X,Y,Z),title(系统缺省视角系统缺省视角)subplot(2,2,2),surf(X,Y,Z),view(180,0),title(180,0)视角视角)subplot(2,2,3),surf(X,Y,Z),view(-37.5,-30),title(-37.5,-30)视角视角)subplot(2,2,4),surf(X,Y,Z),view(0,90),title(0,90)视角视角)3.4.4 光线对立体的影响光线对立体的影响 我们都知道光线对三维图形有影响,如一个球正对光线的部分发亮,而背光我们都知道光线对三维图形有影响,如一个球正对光线的部分发亮,而背光处则发暗。对光的反映还根据物体的材料不同而有不同,例如强光照在一个处则发暗。对光的反映还根据物体的材料不同而有不同,例如强光照在一个网球上没有非常强烈的反光,而如果强光照在一个抛光的金属球上则有非常网球上没有非常强烈的反光,而如果强光照在一个抛光的金属球上则有非常强烈的反光。所有这些现象在强烈的反光。所有这些现象在MATLAB中都可以模拟,既有各种光线强度、中都可以模拟,既有各种光线强度、位置的命令,也有物体材质的刻画命令。位置的命令,也有物体材质的刻画命令。 创建光线对象命令创建光线对象命令light,light命令的语法为:命令的语法为:light(PropertyName, PropertyValue, .)这里特性这里特性PropertyName 可以为:可以为:Color 光源的颜色光源的颜色 颜色的值可以用数组颜色的值可以用数组a,b,c,元素均为小于等于,元素均为小于等于1,大于等于,大于等于0的数,也可以用的数,也可以用y, r,分别表示黄,红等来表示。,分别表示黄,红等来表示。Style 光源的距离类型,即是无限远还是某距离的光源光源的距离类型,即是无限远还是某距离的光源 infinite | localPosition 光源的方位,某个角度光源的方位,某个角度 用用a,b,c表示光源的方位,系统内定为表示光源的方位,系统内定为1,0,1创建材质对象的命令为创建材质对象的命令为material,其语法为:,其语法为: material shiny 抛光材质,即具有强烈的反光效应抛光材质,即具有强烈的反光效应material dull 具有吸光效应的材质,反光度差具有吸光效应的材质,反光度差 material metal 金属材质,具有反光效应金属材质,具有反光效应利用参数利用参数ka,kd,ks自定义反光效果的命令为:自定义反光效果的命令为:material(ka kd ks) material(ka kd ks n)material(ka kd ks n sc)【例【例3.4.6】作四个球,显示材质的不同,对光线的反映不同】作四个球,显示材质的不同,对光线的反映不同cc=0,1,0; p=30subplot(2,2,1); % 作第一幅子图,完全按系统内定的参数作第一幅子图,完全按系统内定的参数sphere(p); % 利用利用sphere函数产生圆球数据函数产生圆球数据title(material default )subplot(2,2,2) % 作第二幅子图作第二幅子图sphere(p);shading interp % 对阴影进行插值平滑处理对阴影进行插值平滑处理 set(gcf,Renderer,zbuffer) % 对图形句柄进行设置对图形句柄进行设置set(findobj(gca,type,surface),. % 对图形对象进行表面处理,如光线对图形对象进行表面处理,如光线等等 FaceLighting,phong,. AmbientStrength,.3,DiffuseStrength,.8,. SpecularStrength,.9,SpecularExponent,25,. BackFaceLighting,unlit)light(Position,0 -2 1,color,cc) % 设置光源位置设置光源位置material dull % 设置图形对象的材质为吸收型材质设置图形对象的材质为吸收型材质title(material dull) subplot(2,2,3) sphere(p); shading interp set(gcf,Renderer,zbuffer)set(findobj(gca,type,surface),. FaceLighting,phong,. AmbientStrength,.3,DiffuseStrength,.8,. SpecularStrength,.9,SpecularExponent,25,. BackFaceLighting,unlit)light(Position,0 -2 1,color,cc)material shinytitle(material shiny )subplot(2,2,4) sphere(p); shading interp set(gcf,Renderer,zbuffer)set(findobj(gca,type,surface),. FaceLighting,phong,. AmbientStrength,.3,DiffuseStrength,.8,. SpecularStrength,.9,SpecularExponent,25,. BackFaceLighting,unlit)light(Position,0 -2 1,color,cc)material metaltitle(material metal)colormap(jet)3.4.5 透视效果函数透视效果函数我们可以利用透明函数对立体对象进行透明处理。透明处理的对象为物体表面、图像、边我们可以利用透明函数对立体对象进行透明处理。透明处理的对象为物体表面、图像、边缘等。透明函数为缘等。透明函数为alpha(p),这里,这里p取取0,1之间的实数,当取之间的实数,当取0时图形对象完全透时图形对象完全透明,而取明,而取1时则完全不透明。时则完全不透明。【例【例3.4.7】对射流表面进行透明处理,射流数据为】对射流表面进行透明处理,射流数据为flow。计算结果见图。计算结果见图3.4.9x y z v = flow;subplot(1,2,1);p = patch(isosurface(x,y,z,v,-3);isonormals(x,y,z,v,p);set(p,facecolor,red,edgecolor,none);daspect(1 1 1);view(3); axis tight; grid on;camlight; lighting gouraud;title(系统内定值,不透明系统内定值,不透明)subplot(1,2,2);p = patch(isosurface(x,y,z,v,-3);isonormals(x,y,z,v,p);set(p,facecolor,red,edgecolor,none);daspect(1 1 1);view(3); axis tight; grid on;camlight; lighting gouraud;alpha(.4);title(透明度为透明度为0.4)3.4.6 立体图形的切片处理立体图形的切片处理 在科学研究中我们常常将物体进行切片处理,观察物体内部的结构。典型的在科学研究中我们常常将物体进行切片处理,观察物体内部的结构。典型的有对人体的磁共振获得人体某部位的立体数据,然后进行截取某截面进行深有对人体的磁共振获得人体某部位的立体数据,然后进行截取某截面进行深入研究。或将人体组织进行冷冻,然后进行病理切片进行病理研究。入研究。或将人体组织进行冷冻,然后进行病理切片进行病理研究。2019年全国大学生数学建模竞赛就是有关切片问题的例子。年全国大学生数学建模竞赛就是有关切片问题的例子。MATLAB提供了各种提供了各种命令可以对立体进行切片处理。切片命令的语法为:命令可以对立体进行切片处理。切片命令的语法为:slice(V,sx,sy,sz)slice(X,Y,Z,V,sx,sy,sz)slice(V,XI,YI,ZI)slice(X,Y,Z,V,XI,YI,ZI)slice(.,method)h = slice(.)slice命令可以分别按命令可以分别按x,y,z方向进行切片这里。方向进行切片这里。V:是立体数据:是立体数据sx,sy,sz:为数据点或向量,分别在三个轴上按向量给定的点作切面。:为数据点或向量,分别在三个轴上按向量给定的点作切面。对对slice产生的切片作旋转处理,产生的切片作旋转处理,rotate命令可以对切片进行任意角度的旋转。命令可以对切片进行任意角度的旋转。rotate的语法为:的语法为:rotate(h,direction,alpha)rotate(.,origin)这里这里h:为由:为由slice建立的切片建立的切片direction:为二维或三维显示方向的数组:为二维或三维显示方向的数组alpha: 对给定的方向按右手准则旋转的角度对给定的方向按右手准则旋转的角度 【例【例5.4.8】 仍然是对射流数据进行处理,现在我们对它进行切片处理,并从不同的角度仍然是对射流数据进行处理,现在我们对它进行切片处理,并从不同的角度来看切片的图像。结果见图来看切片的图像。结果见图5.4.10x,y,z,v = flow;ax=-38.5,16;0,45 % 建立视角数据建立视角数据for m=1:2 % 建立切片大小建立切片大小xmin = min(x(:); ymin = min(y(:); zmin = min(z(:);xmax = max(x(:); ymax = max(y(:); zmax = max(z(:);% 同时作两幅不同方向的切片图同时作两幅不同方向的切片图subplot(1,2,m) hslice = surf(linspace(xmin,xmax,100),. linspace(ymin,ymax,100),. zeros(100); % 建立切片建立切片rotate(hslice,-2,0,0,-45) %旋转切片旋转切片45度,形成新的切片。度,形成新的切片。% 获取新切片的数据获取新切片的数据xd = get(hslice,XData);yd = get(hslice,YData);zd = get(hslice,ZData);delete(hslice) % 将原切片删除将原切片删除% 对切片上色、插值加密等附加修饰对切片上色、插值加密等附加修饰h = slice(x,y,z,v,xd,yd,zd);set(h,FaceColor,interp, EdgeColor,none, DiffuseStrength,.8)daspect(1,1,1)axis tightbox offview(ax(m,:)camzoom(1.4)camproj perspectivelightangle(-45,45)colormap (jet(24)set(gcf,Renderer,zbuffer)end 图图 3.4.10【例【例3.4.9】本例为】本例为2019全国大学生数学建模竞赛全国大学生数学建模竞赛A题,题例见第十章。再现血管的原题,题例见第十章。再现血管的原状并切片,进行比较来验证恢复的正确性。图状并切片,进行比较来验证恢复的正确性。图3.4.11为血管的再现图,图为血管的再现图,图3.4.12为切片为切片比较图。比较图。flops(0);tic load (f:cmcmtuResult) %读取数据,中轴线上读取数据,中轴线上100点的坐标,半径点的坐标,半径imgnumber=100R=sum(Result(:,1)/imgnumber;%Result(:,2:3)=Result(:,2:3)z=1:imgnumber;Poly_zx=polyfit(z,Result(z,2),6);Poly_zy=polyfit(z,Result(z,3),6);x=polyval(Poly_zx,z);y=polyval(Poly_zy,z);% 用多项式拟合中轴方程并在上面取用多项式拟合中轴方程并在上面取100个点个点% 作三维图作三维图for k=1:imgnumber X,Y,Z=ellipsoid(x(k),y(k),z(k),R,R,R,10); h=surf(X,Y,Z); set(h,FaceColor,interp,. EdgeColor,none,. DiffuseStrength,.8) hold onendhold onalpha(0.2)hslice = surf(linspace(0,512,100),. linspace(0,512,100),. zeros(100)+30) % 建立切片建立切片colormap (jet(24)delete(h)图图3.4.11是由给定的是由给定的100个等距离横截面图像,计算出血管的中轴线方程。然后在计算个等距离横截面图像,计算出血管的中轴线方程。然后在计算机上进行血管的原样恢复。为验证恢复的正确性,我们可以对血管进行切片并跟原截面进机上进行血管的原样恢复。为验证恢复的正确性,我们可以对血管进行切片并跟原截面进行比较。图行比较。图3.4.12为切片示意图,为说明问题对血管进行了透明处理。为切片示意图,为说明问题对血管进行了透明处理。事实上我们对事实上我们对100片截面进行了比较,这里仅取片截面进行了比较,这里仅取5、40、70、90四幅图像的比较图,在四幅图像的比较图,在图图3.4.13中,左上图为第中,左上图为第5个截面与复原血管切片的图形,我们可以看出拟合的很好。个截面与复原血管切片的图形,我们可以看出拟合的很好。右上的小图为第右上的小图为第40幅截面与复原血管切片的图形,左下图为第幅截面与复原血管切片的图形,左下图为第70幅截面与复原血管切片幅截面与复原血管切片的图形,而右下图为第的图形,而右下图为第90幅截面与复原血管切片的图形。幅截面与复原血管切片的图形。我们可以看到第我们可以看到第90幅图像拟合的不好,这是因为复原的血管末端没有延伸出去。如果再幅图像拟合的不好,这是因为复原的血管末端没有延伸出去。如果再近一步进行处理,如对血管进行外延,则结果会大大地改善。近一步进行处理,如对血管进行外延,则结果会大大地改善。3.5 多子图绘图多子图绘图MATLAB为我们提供了多图共显的功能,这为我们进行比较研为我们提供了多图共显的功能,这为我们进行比较研究提供了方便。前面我们已经大量使用了多图共显的图形。究提供了方便。前面我们已经大量使用了多图共显的图形。例如图例如图3.4.13,同时显示四幅截面拟合图形,比较好地说明,同时显示四幅截面拟合图形,比较好地说明了血管恢复的整体情况。了血管恢复的整体情况。多子图绘图的基本命令为:多子图绘图的基本命令为:subplotm, n, k) 表示在表示在mn个图形中的第个图形中的第k个子个子图。图。subplot(position, ) 在指定的位置上作子图。在指定的位置上作子图。【例【例3.5.1】演示】演示subplot指令对图形窗的分割。指令对图形窗的分割。clc;t=(pi*(0:1000)/1000);y1=sin(t);y2=sin(10*t);y12=sin(t).*sin(10*t);subplot(2,2,1),plot(t,y1);axis(0,pi,-1,1)subplot(2,2,2),plot(t,y2);axis(0,pi,-1,1)subplot(position,0.2,0.05,0.6,0.45)plot(t,y12,b-,t,y1,-y1,r:);axis(0,pi,-1,1) 计算结果见图计算结果见图3.5.1【例【例3.4.2】在人口预测的例子中,我们作出】在人口预测的例子中,我们作出6子个图形。子个图形。3.6 特殊三维作图特殊三维作图有时在作立体图时我们需要挖去其中的某一部分或裁减某一部分,这时我们可以利用有时在作立体图时我们需要挖去其中的某一部分或裁减某一部分,这时我们可以利用“非数方法进行处理,从而获得挖去图形一块的效果。非数方法进行处理,从而获得挖去图形一块的效果。3.6.1 图形的镂空图形的镂空【例【例3.6.1】利用】利用“非数非数NaN,对图形的第三部分进行剪切处理。,对图形的第三部分进行剪切处理。clf;t=linspace(0,2*pi,100);r=1-exp(-t/2).*cos(4*t);%旋转母线旋转母线X,Y,Z=cylinder(r,60);% 产生旋转柱面数据产生旋转柱面数据ii=find(X0&Y.5|abs(Y).5);% 找找x-y平面的带形部分平面的带形部分Z(ii)=zeros(size(ii);%强制为强制为0surf(X,Y,Z)shading interp;colormap(hsv) % 对阴影进行平滑插值并置色对阴影进行平滑插值并置色light(position,0,-15,1);lighting phong % 设置光线设置光线material(0.8,0.8,0.5,10,0.5) % 设置材质设置材质3.7 统计图形的作图统计图形的作图 在图形中另一类经常使用的图形是统计图形,统计模型在数学建模中所占比例不断加在图形中另一类经常使用的图形是统计图形,统计模型在数学建模中所占比例不断加大。统计图形包括直方图、条形图、饼形图等等十分丰富。这里仅做简单介绍,我们大。统计图形包括直方图、条形图、饼形图等等十分丰富。这里仅做简单介绍,我们将在统计工具箱中作详细介绍。将在统计工具箱中作详细介绍。3.7.1 方差分析图方差分析图 方差分析是对给定的样本推断样本是否来自一个总体,这仅介绍单因素方差分析的图方差分析是对给定的样本推断样本是否来自一个总体,这仅介绍单因素方差分析的图表,它可以对方差分析表进行更直观的说明。结果是非常显著的不同。表,它可以对方差分析表进行更直观的说明。结果是非常显著的不同。【例【例3.7.1】Hogg 和和 Ledolter (1987)对来自五个不同地方牛奶细菌的含量进行了对来自五个不同地方牛奶细菌的含量进行了研究,目的是研究不同地方牛奶的细菌含量是否有显著的差异。研究,目的是研究不同地方牛奶的细菌含量是否有显著的差异。load hogg % 调出调出hogg数据数据hoggp,tbl,stats = anova1(hogg); % 产生方差分析表和图形产生方差分析表和图形p % 显示显著性水平显示显著性水平 hogg =hogg = 24 14 11 7 19 24 14 11 7 19 15 7 9 7 24 15 7 9 7 24 21 12 7 4 19 21 12 7 4 19 27 17 13 7 15 27 17 13 7 15 33 14 12 12 10 33 14 12 12 10 23 16 18 18 20 23 16 18 18 20p = 1.1971e-004p = 1.1971e-0043.7.2 正态分布检验图、经验分布图正态分布检验图、经验分布图检验一组随机样本是否为正态分布是统计分析中经常要使用的方法,用正态分检验一组随机样本是否为正态分布是统计分析中经常要使用的方法,用正态分布检验图可以直观地看出一组随机数是否为正态分布。布检验图可以直观地看出一组随机数是否为正态分布。【例【例3.7.2】用正态分布随机数发生器产生】用正态分布随机数发生器产生20个随机数,再用卡方分布随机个随机数,再用卡方分布随机数发生器产生数发生器产生20个随机数,用正态分布检验图来判断那个是正态分布随机个随机数,用正态分布检验图来判断那个是正态分布随机数。数。x = normrnd(2,1,20,1); % 产生产生20个均值为个均值为2的正态分布随机数的正态分布随机数y = chi2rnd(2,20,1) % 产生产生20个均值为个均值为2的卡方分布随机数的卡方分布随机数subplot(1,2,1),normplot(x) % 作正态分布检验图作正态分布检验图subplot(1,2,2),normplot(y); % 作正态分布检验图作正态分布检验图可以看出在红线附近的是服从正态分布的样本,而第二幅图明显不服从正态分布。可以看出在红线附近的是服从正态分布的样本,而第二幅图明显不服从正态分布。【例【例3.7.3】对样本作经验分布图,然后进行拟合优度检验也是常用的统计方法,以下作】对样本作经验分布图,然后进行拟合优度检验也是常用的统计方法,以下作样本的经验分布图。样本的经验分布图。x = normrnd(2,1,500,1)y = weibrnd(2,1,500,1);subplot(1,2,1),cdfplot(x),title(正态经验分布图正态经验分布图CDF)subplot(1,2,2),cdfplot(y),title(威布尔经验分布图威布尔经验分布图CDF)3.7.3 直方图、饼形图直方图、饼形图 直方图是常用的统计图形之一,可以直观显示各种数据。直方图是常用的统计图形之一,可以直观显示各种数据。【例【例3.7.4】在生物化学领的实验中,往往在一个自变量中有两个因变量。我们】在生物化学领的实验中,往往在一个自变量中有两个因变量。我们想把这两个因变量画在一起,并且其中一个是条形图,一个是曲线图。想把这两个因变量画在一起,并且其中一个是条形图,一个是曲线图。TCE = 515 420 370 250 135 120 60 20;temp = 29 23 27 25 20 23 23 27;days = 0:5:35;% 先作条型图,横坐标为天数,纵坐标为温度。先作条型图,横坐标为天数,纵坐标为温度。bar(days,temp,c),xlabel(天数天数),ylabel(温度温度(oC)% 现在加一条化学元素浓度曲线现在加一条化学元素浓度曲线h1 = gca;h2 = axes(Position,get(h1,Position); % 建立第二条纵坐标建立第二条纵坐标plot(days,TCE,LineWidth,3) % 作曲线图作曲线图% 将第二个图形固定在正确的位置将第二个图形固定在正确的位置set(h2,YAxisLocation,right,Color,none,XTickLabel,)set(h2,XLim,get(h1,XLim),Layer,top)text(11,380,化学元素浓度化学元素浓度,Rotation,-55,FontSize,16)ylabel(化学元素浓度化学元素浓度(PPM)title(生物化学实验生物化学实验,FontSize,16)set(gcf,PaperPositionMode,auto)【例【例3.7.5】对给定的样本作直方图】对给定的样本作直方图x = -3:0.2:3; % 对作图区间进行划分对作图区间进行划分y = randn(10000,1); % 对正态分布随机数抽一万个样对正态分布随机数抽一万个样hist(y,x) % 作直方图作直方图h = findobj(gca,Type,patch); % 寻找当前图形句柄寻找当前图形句柄set(h,FaceColor,r,EdgeColor,w) % 对句柄进行重新设置对句柄进行重新设置title(卡方对子区间长度为卡方对子区间长度为0.2作直方图作直方图);二、饼形图二、饼形图 作饼形图命令的语法为:作饼形图命令的语法为:pie(X,explode)这里这里X:为一维数组,作图时将元素求和,然后算出每个元素所占比率。:为一维数组,作图时将元素求和,然后算出每个元素所占比率。explode:和数组:和数组X同维数,元素为同维数,元素为0或或1,1表示相应的切块突出。表示相应的切块突出。【例【例3.7.6】2019某时间全国某时间全国SARS发病率情况示意图。发病率情况示意图。x = 3 3.5 1.3 1 2;explode = 0 1 0 0 0; % 将北京突出将北京突出subplot(1,2,1),pie(x,explode),legend(广东广东,北京北京,山西山西,内蒙内蒙,其他其他)subplot(1,2,2),pie3(x,explode)colormap3.7.4 图形添色图形添色为使图形更能说明问题,我们往往将一个封闭图形的内部添上各种颜色,使用的为使图形更能说明问题,我们往往将一个封闭图形的内部添上各种颜色,使用的命令为:命令为:fill(X,Y,C)fill(X,Y,ColorSpec)fill(X1,Y1,C1,X2,Y2,C2,.)fill(.,PropertyName,PropertyValue)h = fill(.)X,Y:为数据向量确定一个多边行:为数据向量确定一个多边行C:为颜色向量:为颜色向量X1,Y1,C1,X2,Y2,C2,.:分别对多个多边形填颜色:分别对多个多边形填颜色【例【例 3.7.7】 建立一个多边形,并用蓝色填空。建立一个多边形,并用蓝色填空。t = (1/16:1/8:1)*2*pi; x = sin(t);y = cos(t); % x,y产生产生8边形数据边形数据subplot(1,2,1),fill(x,y,b) % 对多边形添蓝色对多边形添蓝色axis squaretitle(对多对多8边形填色边形填色)t1 = (1/16:1/12:1)*2*pi; x1 = sin(t1);y1 = cos(t1); % 产生多边形数据产生多边形数据subplot(1,2,2),fill(x1,y1,b)axis squaretitle(对多对多12边形填色边形填色)【例【例 3.7.8】在数理统计中,做显著性水平和分位点示意图。】在数理统计中,做显著性水平和分位点示意图。clf;v=4; % 设置自由度设置自由度p=0.95; % 给定显著性水平给定显著性水平q=chi2inv(p,v);% 求置信水平为求置信水平为90%的分位点。的分位点。x=0:0.1:15;kf_4=chi2pdf(x,v);%计算的概率密度函数,供绘制曲线用。计算的概率密度函数,供绘制曲线用。%绘制图形,并把置信区间填色。绘制图形,并把置信区间填色。plot(x,kf_4,b),hold onxxf=0:0.1:q;yyf=chi2pdf(xxf,v);%为填色而计算为填色而计算fill(xxf,q,yyf,0,g)% 对封闭图形填色对封闭图形填色% 以下写注释以下写注释text(q*1.01,0.01,num2str(q)text(10,0.16,fontsize16 xchi2 (4)text(1.5,0.08,fontname隶书隶书fontsize22置信水平置信水平0.95)text(12,.008, downarrow ,FontSize,22)text(11,0.03,fontname隶书隶书fontsize22拒绝域拒绝域)3.7.5 散点图散点图scatter , scatter3散点图是科学研究和数学建模中经常使用的作图方式,它可以方便地让我们了解散点图是科学研究和数学建模中经常使用的作图方式,它可以方便地让我们了解数据的分布,数据的特性。数据的分布,数据的特性。 【例【例3.7.9】对美国】对美国17901970人口发展趋势作散点图。人口发展趋势作散点图。load census % 读入人口数据读入人口数据nd=1:21 % 建立年代变量建立年代变量scatter(nd,pop,rs) % 作散点图作散点图title(人口发展趋势的散点图人口发展趋势的散点图)【例【例3.7.10】作立体散点图。】作立体散点图。clearx,y,z = sphere(16);X = x(:) x(:) x(:);Y = y(:) y(:) y(:);Z = z(:) z(:) z(:);meshz(X,Y,Z),hold onscatter3(X(:),Y(:),Z(:),filled), view(-30,60)title(立体散点图立体散点图)3.7.6 四维表现四维表现 三维图形有时还不能很好地说明问题,例如对于一个高山的立体图,虽然有三维图形有时还不能很好地说明问题,例如对于一个高山的立体图,虽然有颜色可以看出地形的高低,但例如红色是表示高度较高,高的具体数据则反颜色可以看出地形的高低,但例如红色是表示高度较高,高的具体数据则反映不出来。映不出来。MARLABTIG 提供了四维表现命令提供了四维表现命令colorbar,可以更细致地,可以更细致地描述复杂的立体图形。描述复杂的立体图形。Colorbar的语法为:的语法为:colorbarcolorbar(vert)colorbar(horiz)colorbar(h)h = colorbar(.)colorbar(.,peer,axes_handle)这里参数:这里参数:vert:垂直色图:垂直色图horiz:水平色图:水平色图【例【例3.7.11】显示水平、垂直色图的四维表示。】显示水平、垂直色图的四维表示。z=peaks(30)subplot(1,2,1),surf(z);shading interpcolormap coolcolorbar(horiz)hold offsubplot(1,2,2),surf(z);shading facetedcolormap summercolorbar(vert)3.8 函数作图函数作图 前面介绍的是数据作图及图形的修饰,本节将介绍另一类作图系列命令,即直接前面介绍的是数据作图及图形的修饰,本节将介绍另一类作图系列命令,即直接给出公式就可以作图,这是一类高端作图命令,修饰的自由度较小。这类命令是以给出公式就可以作图,这是一类高端作图命令,修饰的自由度较小。这类命令是以ez或或f开头,利用帮助功能可以看到。开头,利用帮助功能可以看到。 3.8.1 单变量函数的二维作图单变量函数的二维作图函数二维作图命令为函数二维作图命令为ezplot、fplot,这两个命令用法类似,这里仅介绍,这两个命令用法类似,这里仅介绍ezplot。ezplot的语法为:的语法为:ezplot(f)ezplot(f,min,max)ezplot(f,xmin,xmax,ymin,ymax)ezplot(x,y)ezplot(x,y,tmin,tmax)ezplot(.,figure)这里:这里:f:为被作图函数,可以是字符串函数,内:为被作图函数,可以是字符串函数,内联函数或内部函数。联函数或内部函数。min,max:为函数的作图范围。:为函数的作图范围。x,y:为:为t的函数,即为参数坐标。的函数,即为参数坐标。tmin,tmax:自命令:自命令t的定义域。的定义域。Figure:图形窗口中按上面的格式作图:图形窗口中按上面的格式作图【例【例3.8.1】用】用ezplot命令作四幅各种类型的图形。命令作四幅各种类型的图形。subplot(2,2,1);ezplot(x2,x3,-2 2) % 同时作两幅图同时作两幅图subplot(2,2,2);ezplot(humps,0 1) % 对内部函数作图对内部函数作图subplot(2,2,3);ezplot(tan(t),2*pi*-1 1) subplot(2,2,4);ezplot(sin(t),cos(t),-pi,pi) % 对参数坐标作图对参数坐标作图两自变量函数的作图两自变量函数的作图对该类函数作图的命令很多但用法类似,以对该类函数作图的命令很多但用法类似,以ezsurf为例,其语法为:为例,其语法为:ezsurf(f)ezsurf(f,domain)ezsurf(x,y,z)ezsurf(x,y,z,smin,smax,tmin,tmax) ezsurf(.,n)ezsurf(.,circ)这里这里f:为字符串二元函数、符号表达式、内部函数或自定义函数。:为字符串二元函数、符号表达式、内部函数或自定义函数。domain:为两自变量的定义域。:为两自变量的定义域。x,y,z:为参数方程:为参数方程x(s,t),y(s,t),z(s,t),作图区域。,作图区域。smin,smax,tmin,tmax:自定义绘图区域。:自定义绘图区域。n:定义网格点的个数,系统内定为:定义网格点的个数,系统内定为60。circ:作图定义域为圆形。:作图定义域为圆形。【例【例3.8.2】对二元函数作四幅不同参数的图形。】对二元函数作四幅不同参数的图形。subplot(2,2,1);ezsurf(x2+y2,20) % 取取20个网格点作图个网格点作图subplot(2,2,2);ezmesh(x2+y2,20) % 作函数的网状图作函数的网状图subplot(2,2,3);ezsurfc(x2+y2,circ) % 定义域为圆形作图和等高线图定义域为圆形作图和等高线图subplot(2,2,4);ezmeshc(x2+y2)【例【例3.8.3】利用符号定义产生符号表达式,并对符号表达式作图。】利用符号定义产生符号表达式,并对符号表达式作图。clearsyms r a % 定义符号参数定义符号参数x=r*sin(a);y=r*cos(a);z=a % 定义符号表达式定义符号表达式subplot(1,2,1),ezmesh(x,y,z) % 对参数符号表达式用系统内定的范围作图对参数符号表达式用系统内定的范围作图subplot(1,2,2),ezmesh(x,y,z,0,5,-2*pi,2*pi) %对参数符号表达式在指对参数符号表达式在指定的范围作图定的范围作图3.9 应用程序的界面设计应用程序的界面设计 界面设计过去对于一般用户来说界面设计过去对于一般用户来说是很麻烦的事情,而应用程序的界面化是很麻烦的事情,而应用程序的界面化操纵又是当今操纵又是当今windows的典型界面之的典型界面之一。而在一。而在MATLAB中提供了图形界面中提供了图形界面控件控件uicontrol函数,可以让我们很函数,可以让我们很方便地产生各种典型的方便地产生各种典型的windows控件控件,如按钮、编辑框、选择框等等。结合,如按钮、编辑框、选择框等等。结合我们的专业计算就可以编写出容易使用我们的专业计算就可以编写出容易使用和演示的计算界面了。例如:和演示的计算界面了。例如:3.9.1 控件产生函数控件产生函数uicontrol制作界面制作界面 在图在图3.9.1的界面中可以看到各种控件,有的是按钮,如的界面中可以看到各种控件,有的是按钮,如Resample按钮,按钮,可以按当前所设随机数和当前的参数即均值和方差重新进行抽样。有的控可以按当前所设随机数和当前的参数即均值和方差重新进行抽样。有的控件仅仅是显示当前的参数,如件仅仅是显示当前的参数,如Mu和和Sigma。有的控件是滑块,上下滑动。有的控件是滑块,上下滑动可以改变可以改变Mu和和Sigma的值。所有这些控件都是用的值。所有这些控件都是用uicontrol函数产生的,函数产生的,函数本身有很多的参数。如区别不同类型的参数、控件的大小、控件的位函数本身有很多的参数。如区别不同类型的参数、控件的大小、控件的位置、控件的颜色以及控件的调用等等。置、控件的颜色以及控件的调用等等。uicontrol命令的语法为:命令的语法为:handle = uicontrol(parent)handle = uicontrol(.,PropertyName,PropertyValue,.) 该命令在一个父界面下创建各种不同类型的控件,其中该命令在一个父界面下创建各种不同类型的控件,其中PropertyName:为该控件的各种特性的名字,如最重要的控件属性为:为该控件的各种特性的名字,如最重要的控件属性为style。PropertyValue:特性的值,如:特性的值,如style属性的某个属性的某个sliders表示控件表示控件style为为滑块。滑块。Style可取的值见下表可取的值见下表表表3.9.1 style的值的值其他常用参数名其他常用参数名PropertyName及其值。见表及其值。见表3.9.2 表表3.9.2 部分常用参数名极其值部分常用参数名极其值【例【例3.9.1】建立一个简单的界面,有两个控件,一个是选择控件,一个是按纽控件。选】建立一个简单的界面,有两个控件,一个是选择控件,一个是按纽控件。选择控件对作图函数择控件对作图函数peaks的图形进行四种颜色的选择,按纽控件清除图形。首先建立一的图形进行四种颜色的选择,按纽控件清除图形。首先建立一个个m函数,函数名为函数,函数名为setmat.m并存放在当前目录中。并存放在当前目录中。peaksval = get(hpop,Value);if val = 1 colormap(hsv)elseif val = 2 colormap(hot)elseif val = 3 colormap(cool)elseif val = 4 colormap(gray)该函数可按界面的选择对图形选择不同的颜色。下面我们编写产生界面的程序。该函数可按界面的选择对图形选择不同的颜色。下面我们编写产生界面的程序。% 产生按纽控件,控件上的文字为产生按纽控件,控件上的文字为Clear,设置大小和位置,调用清图命令,设置大小和位置,调用清图命令claH = uicontrol(Style, pushbutton, String, Clear,. Position, 20 50 100 30, Callback, cla);% 产生选择按纽控件,其中产生选择按纽控件,其中String有四种颜色选择,调用有四种颜色选择,调用m文件文件setmathpop = uicontrol(Style, popup,. String, hsv|hot|cool|gray,. Position, 20 320 100 50,. Callback, setmat); 运行该程序结果见图运行该程序结果见图3.9.23.9.2 利用可视化方法进行界面设计利用可视化方法进行界面设计 我们已经看到利用界面产生函数我们已经看到利用界面产生函数uicontrol可以方便地编程产生应用界面,可以方便地编程产生应用界面,但是当我们设计比较复杂的界面时,如某界面有很多不同类型的控件,控件但是当我们设计比较复杂的界面时,如某界面有很多不同类型的控件,控件之间的合理放置,大小的比例等等设计用手工编程的方法相当麻烦。之间的合理放置,大小的比例等等设计用手工编程的方法相当麻烦。MATLAB提供了一个可视化编程的界面,我们只要在该界面的控件工具窗口提供了一个可视化编程的界面,我们只要在该界面的控件工具窗口中选中某一个控件,并在工作窗口上用鼠标拉出该控件的合适大小和位置,中选中某一个控件,并在工作窗口上用鼠标拉出该控件的合适大小和位置,该控件的一些属性就确定下来了。当我们认为界面设计的满意后,选择保存,该控件的一些属性就确定下来了。当我们认为界面设计的满意后,选择保存,则系统将按你给的文件名产生了两个文件,一个是产生该界面的则系统将按你给的文件名产生了两个文件,一个是产生该界面的m文件,一文件,一个是界面的框架个是界面的框架fig文件。然后对文件。然后对m文件加一些调用函数,就可以产生一个文件加一些调用函数,就可以产生一个“活的界面应用程序了。有关命令为活的界面应用程序了。有关命令为guide,我们可以通过,我们可以通过help功能查询更功能查询更详细的资料。详细的资料。 进入可视化编程界面进入可视化编程界面 在命令窗口中输入命令在命令窗口中输入命令guide, 可以看到如下可视化界面,见图可以看到如下可视化界面,见图3.9.3对齐方式,界面设计时可用鼠标对齐方式,界面设计时可用鼠标拉选多个控件,然后点此图标选拉选多个控件,然后点此图标选择适当的对齐方式。择适当的对齐方式。 菜单编辑,可以增加菜单或改写菜单编辑,可以增加菜单或改写菜单的内容。菜单的内容。m文件编辑,对所设计界面的文件编辑,对所设计界面的m文件进行修改。文件进行修改。特性修改,对控件的属性进行修特性修改,对控件的属性进行修改。改。对象浏览,查看对象集。对象浏览,查看对象集。运行,对设计好的应用界面产生运行,对设计好的应用界面产生m文件和文件和fig文件。文件。【例【例3.9.2】建立一个应用界面,可以选择不同的数据,用命令】建立一个应用界面,可以选择不同的数据,用命令surf、mesh、contour作三种不同的图形。设计思路,首先要产生一个作三种不同的图形。设计思路,首先要产生一个Popup Menu控件可以选择控件可以选择三种不同的数据。然后产生三个三种不同的数据。然后产生三个Push Botton按纽,分别命名为按纽,分别命名为surf、mesh、contour。再拉出一个。再拉出一个Axes控件让其显示图形。具体的设计草图见图控件让其显示图形。具体的设计草图见图3.9.4。(1) 将各种控件分别拉出,其中将各种控件分别拉出,其中Push Botton只需拉出一个,然后点鼠标右键复制只需拉出一个,然后点鼠标右键复制另两个使这三个控件大小一样。具体图形见图另两个使这三个控件大小一样。具体图形见图3.8.5(2) 对控件进行重排,用鼠标选中三个对控件进行重排,用鼠标选中三个Push Botton,点选工具图标设置对齐方式和,点选工具图标设置对齐方式和适当的间隔距离。见图适当的间隔距离。见图3.9.6这里选择水平对齐中的左对齐,间隔距离为这里选择水平对齐中的左对齐,间隔距离为20像素点,点像素点,点ok即排列好了。即排列好了。(3) 对控件设置属性,如点选第一个对控件设置属性,如点选第一个Push Botton,点鼠标右键进入属性设置,点鼠标右键进入属性设置Property Inspector,将,将String属性值改为属性值改为Surf。其他两个类似操作。见图。其他两个类似操作。见图3.9.7对对Popup Menu进行属性设置,将进行属性设置,将String属性值改为三行,见图属性值改为三行,见图3.9.8这样这样Popup Menu控件就有三种数据选择了。到目前为止我们的设计斤就结束了。控件就有三种数据选择了。到目前为止我们的设计斤就结束了。(4) 点击运行图标,产生点击运行图标,产生m文件,和文件,和fig文件。文件。(5) 对对m文件进行添加,到目前为止我们已经有一个文件进行添加,到目前为止我们已经有一个m文件,运行该文件可以产生界面了,文件,运行该文件可以产生界面了,但是控件还不能产生动作,如在但是控件还不能产生动作,如在Popup Menu控件中可以选择控件中可以选择peaks但还不能产生但还不能产生数据,当选择数据,当选择peaks时它必须执行产生数据的时它必须执行产生数据的MATLAB命令。这就是我们必须加到命令。这就是我们必须加到m文件中的一些执行命令了。以下程序为自动产生,这里删去了一些注释。粗体子为文件中的一些执行命令了。以下程序为自动产生,这里删去了一些注释。粗体子为我们在每个按纽产生的子程序下加上去的程序,使每个按纽可以执行各自的任务。我们在每个按纽产生的子程序下加上去的程序,使每个按纽可以执行各自的任务。见程序见程序if nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);end% End initialization code - DO NOT EDIT% - Executes just before exam392 is made visible.function exam392_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% varargin command line arguments to exam392 (see VARARGIN)%以下白色字体子为加上的程序,该段程序产生三种不同的数据以下白色字体子为加上的程序,该段程序产生三种不同的数据handles.peaks = peaks(35);handles.membrane = membrane;x,y = meshgrid(-8:.5:8);r = sqrt(x.2+y.2) + eps;z = sin(r)./r;handles.sinc = z;handles.current_data = handles.peaks;surf(handles.current_data)
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号