《matlab图形句柄》由会员分享,可在线阅读,更多相关《matlab图形句柄(28页珍藏版)》请在金锄头文库上搜索。
1、第8章图形句柄MATLAB的图形是由不同图形对象(如坐标轴、曲线、曲面或文字等)组成的。MATLAB系统给每个图形对象分配一个标识符,称为句柄,以后可以通过该句柄获取或设置该图形对象的属性【本章学习目标】了解图形对象和图形句柄的基本概念。掌握图形对象属性的基本操作。掌握利用图形对象进行绘图操作的方法。8.1图形对象及其句柄MATLAB的图形系统是面向对象的,图形对象是MATLAB为了描述具有类似特征的图形元素而定义的具有一些公共属性的抽象的元素集合,是用于显示图形和制作用户界面的基本要素。8.1.1图形对象MATLAB的图形对象包括图形窗口、坐标轴、用户界面、曲线、曲面、文字、图像等。在MAT
2、LAB中,每一个具体的图形都是由若干个不同的图形对象组成的。图形对象是有层次的,其层次结构如图8.1所示。图形窗口是根对象的子对象,坐标轴和用户界面对象是图形窗口的子对象,曲线、曲面、文字等是坐标轴的子对象。8.1.2图形对象句柄MATLAB在创建每一个图形对象时,都为该对象分配唯一的一个值,称其为图形对象句柄(Handle),它是图形对象的唯一标识符。根对象的句柄值为0;图形窗口对象的句柄值为一正整数,显示在该窗口的标题栏;其他图形对象的句柄为双精度浮点数。MATLAB提供了若干个函数用于获取已有图形对象的句柄,较为常用的函数如表8.1所示。【例8.1】绘制曲线并查看有关对象的句柄。命令如下
3、:x=linspace(0,2*pi,30);y=sin(x);h0=plot(x,y,rx)%曲线对象的句柄h0=171.0016h1=gcf%图形窗口句柄h1=1h2=gca%坐标轴句柄h2=170.0017h3=findobj(gca,Marker,x)%坐标轴上曲线的句柄h3=171.0016图形对象的句柄由系统自动分配,每次分配的值不一定相同。在获取对象的句柄后,可以通过句柄来设置或获取对象的属性。8.1.3图形对象属性1属性名与属性值为方便属性的操作,MATLAB给每种对象的每一个属性规定了一个名字,称为属性名,而属性名的取值称为属性值。例如,LineStyle是曲线对象的一个属性
4、名,它的值决定着线型,取值可以是-、:、-.、-或none。在属性名的写法中,不区分字母的大小写,而且在不引起歧义的前提下,属性名不必写全。例如,lines就代表LineStyle。此外,属性名要用单撇号括起来。2属性的操作(1)设置图形对象属性用户可以通过set函数重新设置图形对象属性,其调用格式为set(句柄,属性名1,属性值1,属性名2,属性值2,)其中“句柄”用于指明要操作的图形对象。如果在调用set函数时省略全部属性名和属性值,则将显示出句柄所有的允许属性。(2)获取图形对象属性用户可通过get函数获取图形对象的属性值,其调用格式为V=get(句柄,属性名)其中V是返回的属性值。如果
5、在调用get函数时省略属性名,则将返回句柄所有的属性值。例如,以下命令用来获得上述曲线的颜色属性值:col=get(h,Color);3对象的公共属性图形对象具有各种各样的属性,有些属性是所有对象共同具备的,有些属性则是各对象所特有的。这里先介绍对象常用的公共属性。(1)Children属性。该属性的取值是该对象所有子对象的句柄组成的一个向量。(2)Color属性。该属性的取值是一个颜色值,既可以用字符表示,也可以用RGB三元组表示。(3)Parent属性。该属性的取值是该对象的父对象的句柄。(4)Tag属性。该属性的取值是一个字符串,它相当于给该对象定义了一个标签。定义了Tag属性后,在任何
6、程序中都可以通过findobj函数获取该标签所对应图形对象的句柄。例如,hf=findobj(0,Tag,Flag1)将在屏幕对象及其子对象中寻找Tag属性为Flag1的对象,并返回句柄。(5)Type属性。表示该对象的类型,该属性的值是只读的。(6)UserData属性。该属性的取值是一个矩阵,默认值为空矩阵。在程序设计中,可以将一个与图形对象有关的比较重要的数据存储在这个属性中,借此可以达到传递数据的目的。具体做法是,先用set函数给某一句柄添加一些附加数据(一个矩阵),如果想使用这样的矩阵,再用get函数调用出来。(7)Visible属性。该属性的取值是on(默认值)或off,决定着图形
7、对象是否在图形窗口中显示出来。【例8.2】在同一坐标下绘制红、绿两条不同的曲线,然后获取绿色曲线的句柄,并利用句柄更改绿色曲线的样式。程序如下:x=0:pi/50:2*pi;y=sin(x);z=cos(x);plot(x,y,r,x,z,g);%绘制两根不同曲线Hl=get(gca,Children);%获取两曲线句柄向量Hlfork=1:size(Hl)ifget(Hl(k),Color)=010%010代表绿色Hlg=Hl(k);%获取绿色线条句柄endendpause%便于观察设置前后的效果set(Hlg,LineStyle,:,Marker,p);%对绿色线条进行设置8.2图形窗口对
8、象与坐标轴除根对象外,所有图形对象都可以由与之同名的低层函数创建。8.2.1图形窗口对象创建图形窗口对象使用figure函数,其调用格式如下。 句柄变量=figure(属性名1,属性值1,属性名2,属性值2,) figure(窗口句柄)使用第1种格式时,按指定的属性来创建图形窗口。使用第2种格式时,若句柄是已经存在的某图形窗口句柄,则使该图形窗口成为当前图形窗口,并在此输出;若句柄是不存在的图形窗口句柄,则使用该句柄创建一个新的图形窗口后,在新的图形窗口输出。figure函数不带参数时,按MATLAB默认的属性值创建图形窗口。要关闭图形窗口,使用close函数,其调用格式为close(窗口句柄
9、)另外,closeall命令可以关闭所有的图形窗口,clf命令则是清除当前图形窗口的内容,但不关闭窗口。图形窗口常用属性(1)MenuBar/ToolBar属性。属性的取值可以是figure(默认值)或none,用来控制图形窗口是否具有菜单条/工具栏。(2)NumberTitle属性。该属性的取值是on(默认值)或off,决定在图形窗口的标题中是否以“FigureNo.n:”为标题前缀,这里n是图形窗口的序号,即句柄值。(3)Resize属性。该属性的取值是on(默认值)或off。决定着在图形窗口建立后可否用鼠标改变该窗口的大小。(4)Pointer属性。该属性的可取值是arrow(默认值)、
10、crosshair、ibeam、watch、topl、topr、botl、botr、circle、cross、fleur、custom等,分别对应于15种典型的鼠标指针形式。(5)Position属性。该属性的取值是一个由4个元素构成的向量,其形式为n1,n2,n3,n4。这个向量定义了图形窗口在屏幕上的位置和大小,其中n1和n2分别为对象左下角的横纵坐标值,n3和n4分别为图形窗口的宽度和高度。它们的单位由Units属性决定。(6)Units属性。该属性的取值可以是下列字符串中的任何一种:normalized(相对单位,为默认值)、pixel(像素)、inches(英寸)、centimete
11、rs(厘米)和points(磅)。(7)对键盘及鼠标响应属性。MATLAB允许对键盘和鼠标键按下这样的动作进行响应,这类属性有KeyPressFcn(键盘键按下响应)、WindowButtonDownFcn(鼠标键按下响应)、WindowButtonMotionFcn(鼠标移动响应)、WindowButtonUpFcn(鼠标键释放响应)等,这些属性所对应的属性值可以为用MATLAB编写的函数名或命令名,表示一旦键盘键或鼠标键按下之后,将自动调用给出的函数或命令。【例8.3】建立一个图形窗口。该图形窗口没有菜单条,标题名称为“我的图形窗口”,该窗口位于屏幕的左下角,其宽度和高度分别为450像素和
12、250像素,且当用户从键盘按下任意一个键时,将在该图形窗口绘制出正弦曲线。命令如下:x=linspace(0,2*pi,60);y=sin(x);hf=figure(Position,5,5,360,210,MenuBar,none,Name,我的图形窗口,NumberTitle,off,KeyPressFcn,plot(x,y);axis(0,2*pi,-1,1););8.2.2坐标轴坐标轴是在图形窗口中定义的一个画图区域。坐标轴对象是图形窗口的子对象,在某个图形窗口中输出图形图像,实质上是指在该图形窗口的当前坐标轴中输出图形图像。建立坐标轴对象使用axes函数,其调用格式如下。 句柄变量=
13、axes(属性名1,属性值1,属性名2,属性值2,) axes或句柄变量=axes调用axes函数用指定的属性在当前图形窗口创建坐标轴,并将其句柄赋给左边的句柄变量。函数不带参数表示按MATLAB默认的属性值在当前图形窗口创建坐标轴。用axes函数建立坐标轴之后,还可以调用axes函数将其设定为当前坐标轴,且坐标轴所在的图形窗口自动成为当前图形窗口,调用格式为axes(坐标轴句柄)MATLAB常用属性(1)Box属性。该属性的取值是on或off(默认值),它决定坐标轴是否带有边框。(2)GridLineStyle属性。该属性的取值可以是:(默认值)、-、-.、-或none,该属性定义网格线的类
14、型。(3)Title属性。该属性的取值是坐标轴标题文字对象的句柄,可以通过该属性对坐标轴标题文字对象进行操作。例如,要改变坐标轴标题的颜色,可执行命令:h=get(gca,Title);%获得坐标轴的标题文字对象句柄set(h,Color,r);%设置标题为红色(5)View属性。该属性的取值是2个元素的数值向量,定义视点。(6)Position属性和Units属性。定义坐标轴左下角在图形窗口上的位置(以图形窗口左下角为原点)。(4)坐标轴刻度属性。这类属性包括以下内容。XLabel、YLabel、ZLabel属性。这3种属性的取值分别是x、y、z轴说明文字的句柄。其操作与Title属性相同。
15、例如,要设置x轴文字说明,可使用命令:h=get(gca,XLabel);%获得x轴文字对象句柄set(h,String,ValuesofXaxis);%设置x轴文字说明XLim、YLim、ZLim属性。这3种属性的取值都是具有2个元素的数值向量,分别定义各坐标轴的下限和上限,默认值为0,1。以前介绍的axis函数实际上是对这些属性的直接赋值。XScale、YScale、ZScale属性。这3种属性的取值都是linear(默认值)或log,这些属性定义各坐标轴的刻度类型。XTickLabel、YTickLabel、ZTickLabel属性。这3种属性的取值都是字符串矩阵,分别用字符串替换x、y
16、、z轴默认的数字型刻度线标签。例如,将坐标轴的x轴刻度线标签改为一些字母,可执行以下命令:set(gca,XTickLabel,A;B;C;D;E;F);Xdir、Ydir、Zdir属性。这3种属性的取值都是normal(默认值)或reverse,分别定义x、y、z轴的方向。(7)字体属性。MATLAB允许对坐标轴标注的字体进行设置,这类属性有FontName(字体名称)、FontWeight(字形)、FontSize(字体大小)、FontUnits(字体大小单位)、FontAngle(字体角度)等。FontName属性的取值是系统支持的一种字体名或FixedWidth;FontSize属性的
17、单位由FontUnits属性决定;FontWeight属性的取值可以是normal(默认值)、bold、light或demi;FontAngle的取值可以是normal(默认值)、italic或oblique。【例8.4】利用坐标轴对象实现图形窗口的任意分割。clf;%清除图形窗口中的内容x,y=meshgrid(0:0.1:pi/2,0:0.1:pi);z=sin(x.2)+cos(y.2);axes(Position,0.05,0.6,0.3,0.3);plot(x,z);set(gca,XDir,reverse)axes(Position,0.45,0.6,0.5,0.35);plot3
18、(x,y,z);set(gca,view,75,15,ZLim,-0.5,1.8)axes(Position,0.1,0.05,0.8,0.5);plot3(x,y,z);gridon;8.3核心图形对象8.3.1曲线对象曲线对象是坐标轴的子对象,它既可以定义在二维坐标系中,也可以定义在三维坐标系中。建立曲线对象使用line函数,其调用格式如下。 句柄变量=line(x,y,属性名1,属性值1,属性名2,属性值2,) 句柄变量=line(x,y,z,属性名1,属性值1,属性名2,属性值2,)其中,对x、y、z的含义和用法与高层曲线函数plot、plot3等一样,其余的选项与前面介绍过的figu
19、re和axes函数类似。每个曲线对象也具有很多属性,除Color、Parent等公共属性外,其他常用属性如下。(1)LineStyle属性。定义线型。(2)LineWidth属性。定义线宽,默认值为0.5磅。(3)Marker属性。定义数据点标记符号,默认值为none。(4)MarkerSize属性。定义数据点标记符号的大小,默认值为6磅。(5)XData、YData、ZData属性。这3种属性的取值都是数值向量或矩阵,分别代表曲线对象的3个坐标轴数据。【例8.5】利用曲线对象绘制曲线y=etsin2t。程序如下:t=0:pi/100:pi;y=sin(2*pi*t).*exp(-t);fig
20、ure(Position,30,100,480,320);axes(GridLineStyle,-.,XLim,0,pi,YLim,-0.6,1);h=get(gca,Title);set(h,String,y=e-tsin(2pit);line(XData,t,YData,y,Marker,*);gridon8.3.2曲面对象曲面对象也是坐标轴的子对象。建立曲面对象使用surface函数,其调用格式为句柄变量=surface(x,y,z,属性名1,属性值1,属性名2,属性值2,)其中,对x、y、z的含义和用法与高层曲面函数mesh、surf等一样,其余的选项与前面介绍过的figure、axe
21、s等函数类似。每个曲面对象也具有很多属性,除公共属性外,其他常用属性如下。(1)EdgeColor属性。定义曲面网格线的颜色或着色方式。取值是代表某颜色的字符或RGB值,还可以是flat、interp或none,默认为黑色(2)FaceColor属性。定义曲面网格片的颜色或着色方式。取值是代表某颜色的字符或RGB值,还可以是flat(默认值)、interp或none。(3)LineStyle属性。定义曲面网格线的线型。(4)LineWidth属性。定义曲面网格线的线宽,默认值为0.5磅。(5)Marker属性。定义曲面数据点标记符号,默认值为none。(6)MarkerSize属性。定义曲面数
22、据点标记符号的大小,默认值为6磅。(7)XData、YData、ZData属性。这3种属性的取值都是数值向量或矩阵,分别代表曲曲面对象的3个坐标轴数据。【例8.6】利用曲面对象绘制三维曲面z=x22y2。程序如下:x,y=meshgrid(-10:0.5:10);z=x.2-2.*y.2;hs=surface(x,y,z,FaceColor,w,EdgeColor,flat);gridon;set(gca,view,-37.5,25);%设置视点%设置标题h=get(gca,Title);set(h,String,网格曲面,FontSize,8,Position,0.4,0.9);pauses
23、et(hs,FaceColor,flat);set(get(gca,Title),String,着色曲面); 8.3.3文本对象文本对象主要用于给图形添加文字标注。在文本对象中除使用一般的文字以外,还允许使用LaTeX文本。使用text函数可以根据指定位置和属性值添加文字说明,并保存句柄。该函数的调用格式为句柄变量=text(x,y,z,说明文字,属性名1,属性值1,属性名2,属性值2,)其中,x、y、z为双精度型,定义文本对象在坐标轴上的位置,长度单位与当前图形的长度单位相同。说明文字中除使用标准的ASCII字符外,还可使用LaTeX格式的控制字符。例如:h=text(0.5,0.5,gam
24、ma=rho2);将得到标注效果:=2。文本对象的其他常用属性如下。(1)String属性。该属性的取值是字符串或字符串矩阵,它记录着文字标注的内容。(2)Interpreter属性。该属性的取值是latex(默认值)、tex或none,该属性控制对文字标注内容的解释方式,即LaTeX方式、TeX方式或ASCII方式。(3)字体属性。这类属性有FontName(字体名称)、FontWeight(字形)、FontSize(字体大小)、FontUnits(字体大小单位)、FontAngle(字体角度)等。FontName属性的取值是系统支持的一种字体名或FixedWidth;FontSize属性定
25、义文本对象的大小,其单位由FontUnits属性决定,默认值为10磅;FontWeight属性的取值可以是normal(默认值)、bold、light或demi;FontAngle的取值可以是normal(默认值)、italic或oblique。(4)Rotation属性。该属性的取值是数值量,默认值为0。它定义文本对象的旋转角度,取正值时表示逆时针方向旋转,取负值时表示顺时针方向旋转。(5)BackgroundColr和EdgeColor属性。设置文本对象的背景颜色和边框线的颜色,可取值为none(默认值)或ColorSpec。(6)HorizontalAlignment属性。该属性控制文本
26、与指定点的相对位置,其取值为left(默认值)、center或right。【例8.7】利用曲线对象绘制曲线并利用文本对象完成标注。程序如下:x=-pi:.1:pi;y1=sin(x);y2=cos(x);h=line(x,y1,LineStyle,:);line(x,y2,LineStyle,-,Color,b);xlabel(-pileqThetaleqpi)ylabel(sin(Theta)title(Plotofsin(Theta)text(-pi/4,sin(-pi/4),leftarrowsin(-pidiv4),FontSize,12)set(h,Color,r,LineWidth
27、,2)%改变曲线1的颜色和线宽8.3.4其他核心对象1补片对象补片对象是由一个或多个多边形构成的。补片对象特别适合为现实世界中的事物建立模型。补片对象可以用fill、fill3、contours和patch函数创建。在MATLAB中,创建补片对象的低层函数是patch函数,通过定义多边形的顶点和多边形的填充颜色来实现。patch函数的调用格式为 patch(x,y,color) patch(x,y,z,color) patch(属性名1,属性值1,属性名2,属性值2,)在前两种格式中,x、y、z是向量或矩阵,定义多边形顶点。若x、y、z为mn大小的矩阵,则每一行的元素构成一个多边形。color
28、指定填充颜色,若f为标量,补片对象用单色填充;若f为向量,补片对象用不同颜色填充各多边形。每个多边形用不同颜色,则可以产生立体效果。第3种格式以指定属性的方式创建补片对象。补片对象的其他常用属性(1)Vertices和Faces属性。其取值都是一个mn大小的矩阵。Vertices属性定义各个顶点,每行是一个顶点的坐标。Faces属性定义图形由m个多边形构成,每个多边形有n个顶点,其每行的元素是顶点的序号(对应Vertices矩阵的行号)。(2)FaceVertexCData属性。当使用Faces和Vertices属性创建补片对象时,该属性用于指定补片颜色。(3)FaceColor属性。设置补片
29、对象的填充样式,可取值为RGB三元组、none、flat和interp(线性渐变)。(4)XData、YData和ZData属性。其取值都是向量或矩阵,分别定义各顶点的x、y、z坐标。若它们为矩阵,则每一列代表一个多边形。【例8.8】用patch函数绘制一个长方体。长方体由6个面构成,每面有4个顶点。可以把一个面当成一个多边形处理,程序如下:clf;k=2;%k为长宽比%X、Y、Z的每行分别表示各面的四个点的x、y、z坐标X=0110;1111;1001;0000;1001;0110;Y=k*0000;0110;1111;1001;0011;0011;Z=0011;0011;0011;0011
30、;0000;1111;%生成和X同大小的颜色矩阵tcolor=rand(size(X,1),size(X,2);patch(X,Y,Z,tcolor,FaceColor,interp);view(-37.5,35),axisequaloff2矩形对象在MATLAB中,矩形、椭圆以及二者之间的过渡图形,如圆角矩形都称为矩形对象。创建矩形对象的低层函数是rectangle,该函数调用格式为rectangle(属性名1,属性值1,属性名2,属性值2,)除公共属性外,矩形对象的其他常用属性如下。(1)Position属性。与坐标轴的Position属性基本相同,相对坐标轴原点定义矩形的位置。(2)Cu
31、rvature属性。定义矩形边的曲率。(3)LineStyle属性。定义线型。(4)LineWidth属性。定义线宽,默认值为0.5磅。(5)EdgeColor属性。定义边框线的颜色。3发光对象发光对象定义光源,这些光源会影响坐标轴中所有patch对象和surface对象的显示效果。MATLAB提供light函数创建发光对象,其调用格式为light(属性名1,属性值1,属性名2,属性值2,)发光对象有如下3个重要属性。(1)Color属性。设置光的颜色。(2)Style属性。设置发光对象是否在无穷远,可取值为infinite(默认值)或local。(3)Position属性。该属性的取值是数值向量,用于设置发光对象与坐标轴原点的距离。发光对象的位置与Style属性有关,若Style属性为local,则设置的是光源的实际位置;若Style属性为infinite,则设置的是光线射过来的方向。【例8.10】光照处理后的球体。程序如下:X,Y,Z=sphere(30);surface(X,Y,Z,FaceColor,flat,EdgeColor,none);shadinginterp;view(-37.5,30)lightinggouraudaxissquarerotate3Donlight(Position,1-12,Style,infinite,color,yellow);