《第3章MATLAB绘图.ppt》由会员分享,可在线阅读,更多相关《第3章MATLAB绘图.ppt(50页珍藏版)》请在课桌文档上搜索。
1、第3章 MATLAB绘图,主要内容:3.1 二维数据曲线图 3.2 其他二维图形 3.3 图形用户界面设计 3.4 案例分析,视觉是人们感受世界、认识自然的最重要途径。图形可以帮助人们直观感受科学计算结果的全局意义和许多内在本质。除了可靠的科学计算功能之外,MATLAB还具有非常强大的图形表达功能,既可以绘制二维图形,又可以绘制三维图形,还可以通过标注、视点、颜色、光照等操作对图形进行修饰。MATLAB有两类绘图命令,一类是直接对图形句柄进行操作的低层绘图命令,另一类是在低层命令基础上建立起来的高层绘图命令。高层绘图命令简单明了、方便高效。利用高层绘图用户不需要过多考虑绘图细节,只需要给出一些
2、基本参数就能得到所需图形。,3.1 二维数据曲线图,MATLAB提供了多种二维图形的绘图指令,但其中最重要、最基本的指令是plot。其它许多特殊绘图指令,或以它为基础而形成,或使用场合较少。本节主要介绍直角坐标系下的二维数据曲线图。绘制二维曲线无疑是其他绘图操作的基础。,3.1.1 单根二维曲线在MATLAB中,绘制直角坐标系下的二维曲线可以利用plot函数。plot函数的基本调用格式为:plot(x,y)其中x和y为长度相同的向量,分别用于存储x坐标和y坐标数据。plot函数用于绘制分别以x坐标和y坐标为横、纵坐标的二维曲线。x和y所包含的元素个数相等,y(i)是x(i)点的函数值。,例 绘
3、制曲线这是以下参数方程形式给出的二维曲线,只要给定参数向量,再分别求出x、y向量即可绘出曲线。程序如下:t=0:0.1:8*pi;x=cos(t)+t.*sin(t);y=sin(t)-t.*cos(t);plot(x,y)程序执行后,打开一个图形窗口,在其中绘出二维曲线,如图所示。,3.1.2 多根二维曲线 在实际应用中,plot函数的输入参数有许多变化形式。1.plot函数的输入参数是矩阵形式当plot函数的输入参数是向量时,绘制单根曲线,这是最基本的用法。在实际应用中,plot函数的输入参数可以是矩阵形式,这时将在同一坐标中以不同颜色绘制多根曲线。(1)当x是向量,y是有一维与x同维的矩
4、阵时,则绘制出不同颜色的曲线。曲线条数等于y矩阵的另一维数,x被作为这些曲线共同的坐标。例如,下列程序可以在同一坐标中同时绘出3根正弦曲线。命令为:x=linspace(0,2*pi,100);y=sin(x);1+sin(x);2+sin(x);plot(x,y)程序首先产生一个行向量x,然后求具有3行的矩阵y,最后在同一坐标中同时绘制出3条曲线。,(2)当x,y是同维矩阵时,则以x,y对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。试分析下列程序绘制的曲线图形。x=0:pi/10:2*pi;y=sin(x);plot(x;x;x,y;y*2;y*3)(3)对只包含一个输入参数的
5、plot函数,当输入参数是实矩阵时,则按列绘制每列元素值相对其坐标下的曲线,曲线条数等于输入参数矩阵的列数。当输入参数是复数矩阵时,则按列分别以元素实部和虚部为横、纵坐标绘制多条曲线。例如,下面的程序可以绘制3个同心圆。t=0:0.01:2*pi;x=exp(i*t);y=x;2*x;3*x;plot(y),2.含多个输入参数的plot函数当plot函数有多个输入参数,且都为向量时,即 plot(x1,y1,x2,y2,xn,yn)其中,x1和y1,x2和y2,xn和yn分别组成一组向量对,每一组向量对的长度可以不同。每一向量对可以绘制出一条曲线,这样可以在同一坐标内绘制出多条曲线。例如,在同
6、一坐标中绘制三条幅值不同的正弦曲线,命令也可写成:x=0:pi/10:2*pi;y=sin(x);plot(x,y,x,y*2,x,y*3),3.plotyy函数MATLAB中的plotyy函数能够绘制双轴图,即在图形左右两侧的y轴度量绘制数据图。在同一个图中度量不同的图形,这样可以使图形表达更加简练,而且有利于数据对比。格式:plotyy(x1,y1,x2,y2)plotyy(x1,y1,x2,y2,function)plotyy(x1,y1,x2,y2,function1,function2)AX,H1,H2=plotyy(),3.1.3设置曲线样式MATLAB提供了一些绘图选项,用于确定
7、所绘曲线的线型、颜色和数据点标记符号。这些选项它们可以组合使用。例如,“b-.”表示蓝色点话线,“y:d”表示黄色虚线并用菱形符号标记数据点。当选项省略时,MATLAB规定,线型一律用实线,颜色将根据曲线的先后顺序依次采用蓝色、绿色、红色、青色、品红色、黄色、黑色。,要设置曲线样式可以在plot函数中加绘图选项,其调用格式为:plot(x1,y1,选项1,x2,y2,选项2,xn,yn,选项n)在类似plot(x,y,s)形式的作图中,格式s可以使用系统默认的格式,也可以重新设置。常用的格式s见表3.2表3.4,其它格式(比如线宽等)可以通过help plot学习使用。例 3-4 以线宽5、红
8、色、点划线、叉号形式绘制x0,2内的正弦函数的图形。命令如下:x=0:pi/10:2*pi;y=sin(x);plot(x,y,r-.x,LineWidth,5);如果只作数据点,格式s直接设置为点型即可,如只作出数据点:x=0 1 2 3;y=2 3 4 5;plot(x,y,o);而作成系统默认的实线:X=0 1 2 3;y=2 3 4 5;plot(x,y);,3.1.4 图形的标注与坐标控制1.图形的标注在绘制图形时,可以对图形加上一些说明,如图形名称、坐标轴说明以及图形某一部分的含义等,这些操作称为添加图形标注,以使图形意义更加明确,可读性更强。图形标识包括:图名(title)、坐标
9、轴名(label)、图形注释(text)和图例(legend)。标识指令的最简捷使用格式如下:title(s)书写图名xlabel(s)横坐标轴名ylabel(s)纵坐标轴名legend(s1,s2,)绘制曲线所用线型、色彩或数据点形图例text(xt,yt,s)在图面(xt,yt)坐标处书写字符注释,例 在0 x2区间内,绘制曲线和,并给图形添加图形标注。程序如下:x=0:pi/100:2*pi;y1=2*exp(-0.5*x);y2=cos(2*pi*x);plot(x,y1,x,y2)title(x from 0 to 2pi);%加图形标题xlabel(Variable X);%加X轴
10、说明ylabel(Variable Y);%加Y轴说明text(0.8,1.5,曲线y1=2e-0.5x);%在指定位置添加图形说明text(2.5,1.1,曲线y2=cos(2pix);legend(y1,y2)%加图例程序运行结果如图所示。,2.坐标控制一般而言,plot命令会根据所给的坐标点来自动决定图轴的范围,但是也可以使用axis命令来指定,它用于控制坐标轴的可视、取向、取值范围和轴的高宽比等,其使用语法如下:axis(xmin xmax ymin ymax)其中xmin和xmax指定x轴的最小和最大值,ymin和ymax则指定y轴的最小和最大值。例 在0 x4,画出正弦波在y轴介于
11、0和1的部分。程序如下:x=0:0.1:4*pi;y=sin(x);plot(x,y);axis(-inf,inf,0,1);程序结果如图所示。,axis函数功能丰富,常用的格式如下:axis auto:使用默认设置。axis equal:纵、横坐标轴采用等长刻度。axis square:产生正方形坐标系(默认为矩形)。axis on/off:显示、取消坐标轴。给坐标轴加网格线用grid命令来控制,加边框用box命令来控制。grid on/off命令控制是画还是不画网格线,box on/off命令控制是加还是不加边框线。,3.1.5 图形窗口的分割在实际应用中,经常需要在一个图形窗口内绘制若干
12、个独立的图形,这就需要对图形窗口进行分隔。分割后的图形窗口由若干个绘图区组成,每一个绘图区可以建立独立的坐标系并绘制图形。同一图形窗口中的不同图形称为子图。MATLAB提供了subplot函数,用来将当前图形窗口分割成若干个绘图区。每个区域代表一个独立的子图,也是一个独立的坐标系,可以通过subplot函数激活某一区域,该区为活动区,所发出的绘图命令都是作用于活动区域。subplot函数的调用格式为:subplot(m,n,p)该函数将当前图形窗口分成个绘图区,即每行个,共行,区号按行优先编号,且选定第p个区为当前活动区。在每一个绘图区允许以不同的坐标系单独绘制图形。,3.2 其他二维图形,前
13、面我们介绍的图形绘制中,坐标轴基本上都是线性刻度的。而在有些学科的研究中这个线性刻度的图形满足不了要求。例如,在控制工程、信号处理等学科中,往往要求绘制出对数坐标的图形,在另一些学科中,有时要绘制出极坐标的图形。MATLAB为我们方便的绘制这些图形提供了专用的命令,另外,MATLAB还为我们提供了绘制其他不同类型的特殊二维图形的命令。,3.2.1 特殊坐标图形的绘制1.绘制对数坐标图形在工程应用中,经常用到对数坐标。MATLAB提供了绘制对数和半对数坐标曲线的函数,调用格式为:semilogx(x1,y1,选项1,x2,y2,选项2,)semilogy(x1,y1,选项1,x2,y2,选项2,
14、)loglog(x1,y1,选项1,x2,y2,选项2,)其中选项的定义与plot函数完全一致,所不同的是坐标轴的选取。semilogx函数使用半对数坐标,x轴为常用对数刻度,而y轴仍保持线性刻度。Semilogx函数也是用半对数坐标,y轴为常用对数刻度,而x轴仍保持线性刻度。Loglog函数使用全对数坐标,x,y轴均采用常用对数刻度。,例 绘制的对数坐标图并与直角线性坐标图进行比较。程序如下:x=0:0.1:10;y=10*x.*x;subplot(2,2,1);plot(x,y);title(plot(x,y);grid on;subplot(2,2,2);semilogx(x,y);ti
15、tle(semilogx(x,y);grid on;subplot(2,2,3);semilogy(x,y);title(semilogy(x,y);grid on;subplot(2,2,4);loglog(x,y);title(loglog(x,y);grid on;程序执行结果如图所示。,2.绘制极坐标图形格式:polar(theta,radius,option)功能:绘制出一个二维折线图形,该图形的各个数据点由极坐标的形式给出。说明:参数theta为极坐标极角,表示各个数据点的角度向量;参数radius为极坐标失径,表示各个数据点的幅值向量;参数option是一个选项参数,其内容与pl
16、ot函数的选项参数类似。,3.2.2特殊二维图形的绘制这里介绍一些特殊图形,这些特殊的图形应用在特定的场合,能够清晰准确的描述数据。这些特殊图形包括条图、面积图、饼图、火柴杆图、矢量图、等高线等。1.条图:条图可以用来表示一些数据的对比情况。MATLAB提供了两类画条图的命令,一类是用于画垂直放置的条图,另一类是用于画水平放置的条图。格式:bar(y,option)、bar(x,y,option)、bar(y,stack)、bar(y,group)功能:1).命令格式bar(y,option)以x=1,2,3,为各个数据点的x坐标,以y向量的各个对应元素为y坐标,画出一个垂直放置的二维条图。2
17、).命令格式bar(x,y,option)以向量x的各个对应元素为x坐标,以y向量的各个对应元素为y坐标,画一个垂直放置的二维条图。3).命令格式bar(y,stack)以x=1,2,3为各个数据点的x坐标,以矩阵y的各个行向量的累加值为y坐标,画出一个垂直放置的、累加式的二维条图。4).命令格式bar(y,group)以x=1,2,3,为各个数据点的x坐标,以矩阵y的各个列向量的累加值为y坐标,画出一个垂直放置的、分组式的二维条图。,例 用给定的数据绘制二维条图。在命令窗口输入如下内容,则可以绘制如图所示的条图。Y=5 2 1;8 7 3;9 8 6;5 5 5;4 3 2;bar(Y),2
18、.面积图格式:area(y)area(x,y)功能:1).命令格式area(y)以x=1,2,3为各个数据点的x坐标,以y向量的各个对应元素为y坐标,画出一个二维图形,并填充该折线与X轴之间的区域。2).命令格式area(x,y)以向量x的各个对应元素为x坐标,以y向量的各个对应元素为y坐标,画出一个二维图形,并填充该折线与X轴之间的区域。,3.饼图饼图在统计中常用来表示个因素所占的百分比示例。在MATLAB中画饼图的命令是pie。格式:pie(y)pie(y,explode)功能:1).若y为向量值时,则该命令绘制出每一元素占全部向量元素总和值的百分比的圆饼图。2).若y为矩阵值时,则该命令
19、绘制出每一元素占全部矩阵元素总和值的百分比的圆饼图。3).参数explode说明是否将某一数据对应的扇形图从整个圆饼图中分离出来,他的维数与y相同,当它的某个元素非零时,即表示将对应的扇形图形从整个圆饼图中分离出来。,4.火柴杆图格式:stem(y)stem(x,y,option)stem(x,y,filled)功能:1).命令stem(y)以x=1,2,3,为各个数据点的x坐标,以y向量的各个对应元素为y坐标,在(x,y)坐标点画出一个空心的小圆圈,并连接一条线段到X坐标轴。2).stem(x,y,option)以向量x的各个元素为x坐标,以y向量的各个对应元素为y坐标,在(x,y)坐标点画
20、一个空心的小圆圈,并连接一条线段到X坐标轴。3).stem(x,y,filled)以向量x的各个元素为x坐标,以y向量的各个对应元素为y坐标,在(x,y)坐标点画一个实心的小圆圈,并连接一条线段到X坐标轴。,5.矢量图这里简单介绍以下矢量绘图函数:6.等值线图格式:contour(Z)contour(Z,n)功能:contour(Z)绘制矩阵Z的等值线图。contour(Z,n)绘制n个等值线水平的Z矩阵的等值线图。其中命令C=contourc(Z,n)是来计算等高线的坐标,clable(c)是给等高线加标注。,3.3 图形用户界面设计,图形用户界面(Graphic User Interfac
21、e,简称GUI)无疑是人与计算机交互操作的重要方式,既形象生动,又使用户的操作更加方便灵活。当今绝大部分开发环境与应用程序都采用图形用户界面,流行的开发工具都可以进行图形用户界面的设计。MATLAB也提供了图形用户界面设计的功能。,3.3.1 图形用户界面介绍图形用户界面由下述几部分组成:布局区域(Layout Area),对象对齐工具(Align Object),菜单编辑器(Menu Editor),切换顺序编辑器(Tab Order Editor),m文件编辑器(M-file Editor),属性检查器(Property Inspector),图形对象浏览器(Object Brower),
22、激活按钮(Run),取消和重复上次操作按钮(Undo和Redo),组件面板(Component Pallette)。1.GUI设计模板在MATLAB主窗口中,选择File菜单中的New菜单项,再选择其中的GUI命令,就会显示图形用户界面的设计模板。MATLAB为GUI设计一共准备了4种模板,分别是Blank GUI(默认)、GUI with Uicontrols(带控件对象的GUI模板)、GUI with Axes and Menu(带坐标轴与菜单的GUI模板)与Modal Question Dialog(带模式问答对话框的GUI模板)。,当用户选择不同的模板时,在GUI设计模板界面的右边就会
23、显示出与该模板对应的GUI图形。2.GUI设计窗口的基本操作在GUI设计模板中选中一个模板,然后单击OK按钮,就会显示GUI设计窗口。选择不同的GUI设计模式时,在GUI设计窗口中显示的结果是不一样的。在GUI设计窗口创建图形对象后,通过双击该对象,就会显示该对象的属性编辑器。在选中图形对象的前提下,按鼠标右键,显示出一个快捷菜单,用户可以从中选择某个子菜单进行相应的设计。在快捷菜单中,View Callback子菜单的CallBack、ButtonDownFcn、DeleteFcn等几个选项是在发生鼠标按下事件时要发生的动作。通过单击这些选项,可以编写事件发生时所需要执行的程序代码。在对象设
24、计区右击鼠标,会显示与图形窗口有关的快捷菜单。,3.对象对齐工具(Align Object)单击对象对齐工具(Align Object),显示对齐工具按钮,如图3-19所示,通过使用Ctrl键选择多个对象,再通过如图3-19所示的相关设置来调整所选对象之间的相对位置和间距,单击【OK】完成,若单击【Apply】则当前对象调整完成并可继续对新对象进行对齐设置。,4.菜单编辑器(Menu Editor)单击菜单编辑器(Menu Editor)或布局区域并单击鼠标右键并选择【Menu Editor】,弹出如图3-20所示的菜单编辑器对话框,可以在该对话框中进行菜单条对象(显示为图形窗口菜单)和上下文
25、菜单(用户右击图形对象弹出菜单)的创建与设置。,5.切换顺序编辑器(Tab Order Editor)利用切换顺序编辑器(Tab Order Editor),可以设置用户按键盘上的Tab键时,对象被选中的先后顺序。选择Tools菜单下的Tab Order Editor菜单项,就可以打开Tab顺序编辑器。6.文件编辑器(M-file Editor)单击m文件编辑器(M-file Editor),可以进行有关m文件的编辑,对应的回调函数(callback)是图形对象被选中时执行的一段代码,其代码体一般包括:获得触发对象的句柄、获得图形元素的属性、获得目标对象的句柄、设置目标对象的属性。,7.属性检
26、查器(Property Inspector)在布局区域选择某个图形组件,再单击属性检查器工具条按钮,或单击鼠标右键并选择【Property Inspector】,弹出如图所示的属性检查器对话框,它用于检查和修改图形对象的某些属性。,8.图形对象浏览器(Object Brower)在布局区域选择某个图形组件,再单击图形对象浏览器(Object Brower),或单击鼠标右键并选择【Object Brower】,弹出图形对象浏览器对话框显示图形界面中各个对象的层次关系。9其它部分激活按钮(Run)用于图形执行,如果是新建图形用户界面,则MATLAB将弹出保存【Save As】对话框。一般情况下,单
27、击激活按钮(Run),相当于其他程序设计语言的编译、链接与执行。取消和重复上次操作按钮(Undo和Redo),用于图形界面上次操作的取消和重复。组件面板(Component Pallette)是为了方便可视化编程提供了较多的控件。,3.3.2 图形用户界面编程基础MATLAB中使用图形用户界面进行编程时,经常会碰到不同的图形对象,这些对象主要包括窗口对象、菜单对象、对话框对象、控件对象和坐标轴对象。1.窗口对象窗口的基本属性包括位置(Position)、窗口编号(Number Title)、标题栏(Name)和菜单(Menubar)。Position属性:设置窗口位置,它为14的向量,前后两个
28、数值分别为窗口矩形左下角及右下角的横坐标与纵坐标数值。Number Title属性:窗口编号选项,有两个:选项on(默认选项)显示窗口编号;选项off则不显示窗口编号。Name属性:窗口标题栏对应的字符串。Menubar属性:菜单栏目选项,有两个:选项Figure为选择系统默认菜单;选项None则不选用系统默认菜单。,窗口对象属性程序设计:创建方法:set(对象句柄,属性1,属性值1,属性2,属性值2,)获取方法:get(对象句柄,属性1,属性值1,属性2,属性值2,)例 试在位置100,200,450,500创建含有系统默认菜单,显示标题“可视化编程”但不显示窗口编号的图形窗口。程序如下:c
29、lear;h=figure;set(h,Position,100,200,450,500,Menubar,figure,Name,可视化编程,NumberTitle,off)程序运行结果如图所示。,2.菜单对象为了建立用户自己的菜单系统,可以先将图形窗口的MenuBar属性设置为none,以取消图形窗口默认的菜单,然后再建立自己的菜单。要建立用户菜单可以用uimenu函数,其调用方法不同,该函数可以用于建立一级菜单项和子菜单项。该函数调用格式为:一级菜单项句柄=uimenu(图形窗口句柄,属性1,属性值1,属性2,属性值2,)子菜单项句柄=uimenu(一级菜单项句柄,属性1,属性值1,属性2
30、,属性值2,)这两种调用格式的区别在于:建立一级菜单项时,要给出窗口的句柄值。如果省略了这个句柄值,MATLAB就会在当前图形窗口中建立这个菜单项。如果此时不存在活动图形窗口,MATLAB会自动打开一个图形窗口,并将该菜单项作为它的菜单对象。在建立子菜单项时,必须指定一级菜单项对应的句柄值。,在MATLAB中,还可以用uicontextmenu函数和图形对象的UIContextMenu属性来建立快捷菜单,步骤如下:(1)利用uicontextmenu函数建立快捷菜单。(2)利用uimenu函数为快捷菜单建立菜单项。(3)利用set函数将该快捷菜单和图形对象联系起来。,例 3-15 绘制曲线y=
31、3sin(6x)sinx,并建立一个与之相联系的快捷菜单,用以控制曲线的线型和曲线宽度。程序如下:x=0:pi/100:2*pi;y=3*sin(6*x).*sin(x);hl=plot(x,y);hc=uicontextmenu;%建立快捷菜单hls=uimenu(hc,Label,线型);%建立菜单项hlw=uimenu(hc,Label,线宽);uimenu(hls,Label,虚线,Call,set(hl,LineStyle,:););uimenu(hls,Label,实线,Call,set(hl,LineStyle,-););uimenu(hlw,Label,加宽,Call,set(
32、hl,LineWidth,2););uimenu(hlw,Label,变细,Call,set(hl,LineWidth,0.5););set(hl,UIContextMenu,hc);%将该快捷菜单和曲线对象联系起来,程序运行后先按默认参数(0.5磅实线)画线,若将鼠标指针指向线条并单击鼠标右键,则弹出快捷菜单如图3-23所示,选择菜单命令可以改变线型和曲线宽度。,3.对话框对象对话框对象包括错误提示对话框、帮助提示对话框和信息提示对话框,调用格式分别为errordlg(sl,name)、helpdlg(sl,name)和messagebox(sl,name),sl为对话框内的字符串,name
33、为对话框标题。4.控件对象各控件的常用属性值如表3.7所示。在MATLAB中提供了用于建立控件对象的函数uicontrol,其调用格式为:对象句柄=uicontrol(图形窗口句柄,属性1,属性值1,属性2,属性值2,)窗口句柄如果是当前图形窗口,“窗口句柄”一项可省略。,3.4 案例分析,大家都知道,我们期末考试完时,学校通常要绘制一些成绩分析表,大多都是使用Excel,在此我们尝试使用Matlab中的“bar”来绘制长条图,从而实现分析目的。程序如下:x=1 2 3 4 5 6;%1:049%2:5059 3:6069 6:9099 y=6 4 12 12 27 18;%各分数段对应人数
34、figure1=figure(Name,成绩分析表,NumberTitle,off);%创建绘图窗口,窗口名称:成绩分析表,不显示默认标题 bar_handle=bar(v6,x,y);set(gca,XTick,1 2 3 4 5 6);%设置绘图属性 set(gca,XTickLabel,049,5059,6069,7079,8089,90100);yLim(0 max(y)+5);xLim(0 7);title(bf成绩分析表,FontSize,12);xLabel(bf标准分数段);yLabel(bf人数);,color=0 1 1%青色 设置长条中各长条颜色 1 1 0%黄色 1 0 0%红色 0 1 0%绿色 0 0 1%蓝色 1 0 1;%品色 set(bar_handle,FaceVertexCData,color);for i=1:6%在各长条上显示该分数段人数text(x(i),y(i)+1,sprintf(%d,y(i),HorizontalAlignment,center,FontSize,11);end结果如图所示所示。,THE END!,