China-pub.com 下载 第14章高级图形 MATLAB的图形系统是面向对象的,也就是说图形的输出,如曲线,是建立图形对象。 通常用户不必去关心这些高级MATLAB命令包含的对象。然而有时为了调整对象也要用一些 低级的MATLAB命令。 MATLAB中介绍了图形用户界面(GU的应用,如单选按钮、滑标和菜单。利用这些用户 能够很容易地进行图形控制。 在MATLAB中加入一系列的图片就可以创建出动画来,利用这些动画可以做一些有趣的演示。 14.1图的结构 一个图形是由许多的图形对象组成的,这些对象是以层次顺序保存的。举一个例子来说 明它们之间的关系。 ■例14.1 用不同线型绘制图形的例程。 clear; x=0.1:0.1:4*pi: 号生成向量x。 yl=sin(x); 号生成y1值。 y2=sin(x) ./x: 号生成y2值。 figure; 各创建一个新窗口。 subp1ot(1,2,1): 告定义第一个子图区域。 plot(x,yl); 号用实线画曲线。 subp1ot(1,2,2): 号定义第二个子图区域。 p1ot(x,y2,'*’): 号用*号画曲线。 上述命令在图形窗口的两个子域内画出了关于x的两个函数y1和y2的图形。结果如图14-1 所示。 图14-1用不同线型绘制的图形 ■
下载 第1 4章 高 级 图 形 M AT L A B的图形系统是面向对象的,也就是说图形的输出,如曲线,是建立图形对象。 通常用户不必去关心这些高级 M AT L A B命令包含的对象。然而有时为了调整对象也要用一些 低级的M AT L A B命令。 M AT L A B中介绍了图形用户界面 ( G U I )的应用,如单选按钮、滑标和菜单。利用这些用户 能够很容易地进行图形控制。 在M AT L A B中加入一系列的图片就可以创建出动画来,利用这些动画可以做一些有趣的演示。 14.1 图的结构 一个图形是由许多的图形对象组成的,这些对象是以层次顺序保存的。举一个例子来说 明它们之间的关系。 ■ 例1 4 . 1 用不同线型绘制图形的例程。 c l e a r ; x = 0 . 1 : 0 . 1 : 4 * p i ; % 生成向量x。 y 1 = s i n ( x ) ; % 生成y 1值。 y2=sin(x) ./x; % 生成y 2值。 f i g u r e ; % 创建一个新窗口。 subplot(1, 2, 1); % 定义第一个子图区域。 plot(x, y1); % 用实线画曲线。 subplot(1, 2, 2); % 定义第二个子图区域。 plot(x, y2, ’*’) ; % 用‘*’号画曲线。 上述命令在图形窗口的两个子域内画出了关于 x的两个函数y 1和y 2的图形。结果如图1 4 - 1 所示。 图14-1 用不同线型绘制的图形 ■
China-pub.coM 第14章高级图形 249 下载 个图形由安排在一个层次结构上的五个图形对象组成。 首先有一个窗口,这是一个图形对象。然后由两个轴对象来定 figure 义相应的坐标轴。这些都可以用subp1ot命令来完成。最后, 用p1ot命令来创建两个线条对象。例14.1中的对象层次结构在 axes axes 2 图14-2中给出。 对于每一个对象都可以修改它的一些属性。例如,可以改 变图形窗口的位置和图形对象的背景色。对于一个轴对象可以 line 1 line 2 改变它在图形区域内的刻度大小和位置。线条对象可以变得更 细,改变成另一种颜色,另一种线型等等。 图14-2对象层次结构 由于是层次结构,所以某个对象改变时,会影响到这个结构中它以下的所有对象。如果 使用鼠标改变图形对象的屏幕位置,线条和轴对象也会跟着变。但是如果改变右边轴对象的 轴刻度,那么只影响这个轴上的线条。 图14-2中还少一个对象:根对象。它是所有图形对象的根,也就是整个层次结构的根。 在创建对象的同时可以直接修改一些对象的属性。在画y2图形时,‘*号表示用星号来画 曲线而不是用实线。调用subplot可以规定图形区域在窗口的位置。然而还有许多属性只能 用在后面描述的st命令来改变。下面的例子修改了上例中图形的部分属性。 ■例14.2 %在上例中,改变左边子图区域的位置和第2个子图的x轴坐标 clear; x=0.1:0.1:4*p1; y1 sin(x); y2 sin(x)./x; fg figure; %创建窗口和图句柄 r1=subp1ot(1,2,1); %创建子图和轴句柄 11=p1ot(x,y1); %创建线条和线条句柄 r2=subp1ot(1,2,2); 12=p1ot(x,y2,’*); disp('The previous example'); pause; set(r1,'Position',[0.10.10.30.3]);%改变位置 set(11,'LineWidth',5); %加粗线条 set(r2,'XTick',[1411]); %改变x轴 set(12,'LineStyle','+'); %改变线型 pause; delete(fg); %删除窗口
一个图形由安排在一个层次结构上的五个图形对象组成。 首先有一个窗口,这是一个图形对象。然后由两个轴对象来定 义相应的坐标轴。这些都可以用 s u b p l o t命令来完成。最后, 用p l o t命令来创建两个线条对象。例1 4 . 1中的对象层次结构在 图1 4 - 2中给出。 对于每一个对象都可以修改它的一些属性。例如,可以改 变图形窗口的位置和图形对象的背景色。对于一个轴对象可以 改变它在图形区域内的刻度大小和位置。线条对象可以变得更 细,改变成另一种颜色,另一种线型等等。 由于是层次结构,所以某个对象改变时,会影响到这个结构中它以下的所有对象。如果 使用鼠标改变图形对象的屏幕位置,线条和轴对象也会跟着变。但是如果改变右边轴对象的 轴刻度,那么只影响这个轴上的线条。 图1 4 - 2中还少一个对象:根对象。它是所有图形对象的根,也就是整个层次结构的根。 在创建对象的同时可以直接修改一些对象的属性。在画 y 2图形时,‘ * ’号表示用星号来画 曲线而不是用实线。调用 s u b p l o t可以规定图形区域在窗口的位置。然而还有许多属性只能 用在后面描述的s e t命令来改变。下面的例子修改了上例中图形的部分属性。 ■ 例1 4 . 2 第1 4章 高 级 图 形 2 4 9 图14-2 对象层次结构 % 在上例中,改变左边子图区域的位置和第2个子图的X轴坐标 % 创建窗口和图句柄 % 创建子图和轴句柄 % 创建线条和线条句柄 % 改变位置 % 加粗线条 % 改变X轴 % 改变线型 % 删除窗口 下载
250 MATLAB5手册 China-pub.com 下载 在使用命令figure、subplot和p1ot时定义一个变量名来创建对象的句柄或者标识。 通过使用句柄可以用st命令来修改对象属性。在本例中修改对象的一个属性,改变了第1个子 图的位置和第2个子图中的x轴刻度值。现在得到的窗口如图14-3所示。 04 图14-3对图14-1修改一些属性后的图形 ■ 14.2图形对象 MATLAB5.2中的各种对象都列在表14-1中。 在图14-4中给出了对象的层次结构图。 在图14-5中给出了不同图形对象的例子。 父对象影响它所有的子对象,这些子对象又影响它们的子对象,以此类推。结果是轴对 象会影响像对象,但不影响用户界面控制。 根据表14-1可知,根对象的句柄值是零,而图形对象的句柄值是整数,其他对象则用浮 点值作为句柄值。 画一个对象,可以使用和对象名字的相同低级命令。如画一线条,可以用命令lie。 对象的属性有两类: ·属性,用来决定对象的显示和保存的数据。 ·方法,用来决定在对对象操作时调用什么样的函数,如当创建或者删除对象时,或当 用户点击它们时。 一些属性有缺省值,如果没有特殊说明,就是用这些缺省值。 有一些属性是用来规定对象色彩的,它们以RGB三元组的形式给出,也就是说,用一个有 三个元素的向量rgb](0≤r,g,b≤1)来表示颜色中的红、绿和蓝色,例如,用[1,0,0]表示红色。 也可以用预定义在MATLAB中表示颜色的字符串来代替RGB三元组,如black'和blue'。 在nelpdesk中的句柄图形对象给出各种不同类型对象的详细说明。MATLAB手册《使 用MATLAB图形和用MATLAB建立GUI》也可得到相关的信息。 表14-1图形对象 对 父代 描 述 root 屏幕是一个根对象。所有其他的图形对象都是根的子 对象。根对象的句柄值是零
在使用命令f i g u r e、s u b p l o t和p l o t时定义一个变量名来创建对象的句柄或者标识。 通过使用句柄可以用s e t命令来修改对象属性。在本例中修改对象的一个属性,改变了第 1个子 图的位置和第2个子图中的x轴刻度值。现在得到的窗口如图 1 4 - 3所示。 图14-3 对图1 4 - 1修改一些属性后的图形 14.2 图形对象 M ATLAB 5.2中的各种对象都列在表1 4 - 1中。 在图1 4 - 4中给出了对象的层次结构图。 在图1 4 - 5中给出了不同图形对象的例子。 父对象影响它所有的子对象,这些子对象又影响它们的子对象,以此类推。结果是轴对 象会影响像对象,但不影响用户界面控制。 根据表1 4 - 1可知,根对象的句柄值是零,而图形对象的句柄值是整数,其他对象则用浮 点值作为句柄值。 画一个对象,可以使用和对象名字的相同低级命令。如画一线条,可以用命令 l i n e。 对象的属性有两类: • 属性,用来决定对象的显示和保存的数据。 • 方法,用来决定在对对象操作时调用什么样的函数,如当创建或者删除对象时,或当 用户点击它们时。 一些属性有缺省值,如果没有特殊说明,就是用这些缺省值。 有一些属性是用来规定对象色彩的,它们以 R G B三元组的形式给出,也就是说,用一个有 三个元素的向量[r g b] ( 0≤r, g, b≤1)来表示颜色中的红、绿和蓝色,例如,用[1, 0, 0]表示红色。 也可以用预定义在M AT L A B中表示颜色的字符串来代替R G B三元组,如‘b l a c k’和‘b l u e’。 在h e l p d e s k中的句柄图形对象给出各种不同类型对象的详细说明。 M AT L A B手册《使 用M AT L A B图形和用M AT L A B建立G U I》也可得到相关的信息。 表14-1 图形对象 对 象 父 代 描 述 root — 屏幕是一个根对象。所有其他的图形对象都是根的子 对象。根对象的句柄值是零 2 5 0 M ATLAB 5 手册 下载 ■
China-pub.com 第14章高级图形 251 下载 (续) 对象 父代 描述 figure root 屏幕上的窗口是一个图形对象,对象的句柄值是整数, 在窗口的标题中给出 axes figure 轴对象在窗口中定义一个图形区域。可以用来描述子对 象的位置和方向 uicontrol figure 用户界面控制。当用户用鼠标在控制对象上点击时, MATLAB会完成一个相应规定的任务 uimenu figure 创建一个窗口菜单,用户用这些菜单能够控制程序 uicontext-menu figure 创建一个图形对象的快捷菜单。也就是当用户点击图形 对象时会显示出菜单来 image axes 用当前的色图矩阵定义一个图像。图像可以有自己的色图 line axes 用plot、plot3、contour和contour3创建一些简单的图形 patch axes 创建补片对象 surface axes 输入定义一个有四个角的曲面,可以用实线或内插颜色 来绘制,或者作为一个网格 text axes 字符串,它的位置由它的父对象一轴对象来指定 light axes 定义多边形或者曲面的光照 root figure uicontext- uicontrol axes uimenu menu image line urface patch text light 图14-4图形对象层次结构图 Figure Line Axes 2D Text Surface Axes 3D Patch 图14-5不同类型图形对象
(续) 对 象 父 代 描 述 f i g u r e r o o t 定屏幕上的窗口是一个图形对象,对象的句柄值是整数, 在窗口的标题中给出 a x e s f i g u r e 定轴对象在窗口中定义一个图形区域。可以用来描述子对 象的位置和方向 u i c o n t r o l f i g u r e 定用户界面控制。当用户用鼠标在控制对象上点击时, M AT L A B会完成一个相应规定的任务 u i m e n u f i g u r e 定创建一个窗口菜单,用户用这些菜单能够控制程序 u i c o n t e x t - m e n u f i g u r e 定创建一个图形对象的快捷菜单。也就是当用户点击图形 对象时会显示出菜单来 i m a g e a x e s 定用当前的色图矩阵定义一个图像。图像可以有自己的色图 l i n e a x e s 定用p l o t、p l o t 3、c o n t o u r和c o n t o u r 3创建一些简单的图形 p a t c h a x e s 定创建补片对象 s u r f a c e a x e s 定输入定义一个有四个角的曲面,可以用实线或内插颜色 来绘制,或者作为一个网格 t e x t a x e s 定字符串,它的位置由它的父对象—轴对象来指定 l i g h t a x e s 定定义多边形或者曲面的光照 图14-4 图形对象层次结构图 图14-5 不同类型图形对象 第1 4章 高 级 图 形 2 5 1 下载
252 MATLAB5手册 China-pub.com 下载 14.2.1通用函数 MATLAB有两个基本命令get和set用来处理图形对象。通过使用它们,可以给出和修 改所有对象的属性值。 ■例14.3 (a)创建一个图形窗口,它的句柄是gfp: gfp=figure; 先查看窗口使用的单位类型: get(gfp,'units') ans pixels 现在来改变窗口的大小和位置: set(gfp,'Position',[100 500 400 400]) 窗口的左下角移动到点(100,500)处,大小设置为400×400像素点。 (b)有些高级命令,如p1ot可以直接改变这些属性值。例如,例14.1中的曲面可以这样来画: plot(x,y1,'LineWidth',5); plot(x,y2,'LineStyle','+');or plot(x,y2,'+'); (c)如果想知道在set和gcf之间有哪些指针可以挑选使用:见命令集155。 set(gcf,'Pointer') crosshair I fullcrosshair I farrow}I ibeam I watch I topl I topr I botl I botr I left I top I right I bottom I circle I cross I fleur I custom 命令集154 通用对象函数 set(h,prstr,alt, 对向量h指向的对象设置其属性prstr为值alt,在它们之后 ··.) 还可以有几个属性。 set(h,a) 对向指向的对象设置其属性值。参数是一个结构,结构中的 域名是对象中可改变的属性名,域的值是赋予相应属性的新值。 set (h,pn,pv, 对向量h指向的对象设置其属性值。参数pn是一个包含可 ...) 改变的属性名的细胞向量,pV是一个包含设置新值的细胞 向量。在它们之后还可以有几个属性的细胞向量。 set(h,pn,pv) 对h(i)指向的对象设置名为pnU)属性的值为pv(i,j)。参数h 是一个包含对象句柄的向量,p是一个包含属性名的细胞 向量,pv是一个包含有m×n个值的细胞矩阵,m是h的长 度,n是pn的长度。这个变量可以单独地设置对象属性。 set(h) 将句柄h的对象所有可改变的属性返回在一个结构中,结 构的域名是这些属性的名字,域值是相应的属性值。 set(0,'Default') 检查对象属性的缺省值。返回一个结构,域名为
14.2.1 通用函数 M AT L A B有两个基本命令 g e t和s e t用来处理图形对象。通过使用它们,可以给出和修 改所有对象的属性值。 ■ 例1 4 . 3 (a) 创建一个图形窗口,它的句柄是 g f p: g f p = f i g u r e ; 先查看窗口使用的单位类型: 现在来改变窗口的大小和位置: 窗口的左下角移动到点( 1 0 0,5 0 0 )处,大小设置为4 0 0×4 0 0像素点。 (b) 有些高级命令,如p l o t可以直接改变这些属性值。例如,例1 4 . 1中的曲面可以这样来画: (c) 如果想知道在s e t和g c f之间有哪些指针可以挑选使用;见命令集 1 5 5。 命令集1 5 4 通用对象函数 s e t ( h , p r s t r , a l t , 对向量h指向的对象设置其属性p r s t r为值a l t,在它们之后 . . . ) 还可以有几个属性。 s e t ( h , a ) 对向量h指向的对象设置其属性值。参数a是一个结构,结构中的 域名是对象中可改变的属性名,域的值是赋予相应属性的新值。 s e t ( h , p n , p v , 对向量h指向的对象设置其属性值。参数 p n是一个包含可 . . . ) 改变的属性名的细胞向量, p v是一个包含设置新值的细胞 向量。在它们之后还可以有几个属性的细胞向量。 s e t ( h , p n , p v ) 对h(i)指向的对象设置名为p n(j)属性的值为p v(i, j)。参数h 是一个包含对象句柄的向量, p n是一个包含属性名的细胞 向量,p v是一个包含有 m×n个值的细胞矩阵, m是h的长 度,n是p n的长度。这个变量可以单独地设置对象属性。 s e t ( h ) 将句柄h的对象所有可改变的属性返回在一个结构中,结 构的域名是这些属性的名字,域值是相应的属性值。 s e t ( 0 ,’D e f a u l t’) 检 查 对 象 属 性 的 缺 省 值 。 返 回 一 个 结 构 , 域 名 为 2 5 2 M ATLAB 5 手册 下载 ■
China-pub.com 第14章高级图形 253 下载 ObjectNamePropertyName',域值是相应的属性缺省值。 注意:只返回值为字符串的属性。 set(O,'DefaultObject返回一个细胞向量,它包含有对象名为ObjectName、属性 NamePropertyName') 名为PropertyName的缺省值。注意:只返回值为字符 串的属性。 set(h,prstr) 返回一个细胞向量,包含句柄h的对象中属性名为prstri的 所有可能值。 get(h) 列出句柄的对象所有属性和相应的值。所有这些都返回在 一个结构中,域名为属性的名字,域值为相应的属性值。 get(h,prstr) 返回句柄h的对象且属性名为prstr的当前值。 get(h,pn) 返回一个细胞矩阵,元素(位,j)的值是句柄h(i)的对象且属 性名为pnG)的属性值。参数pn是一个细胞向量,h是一个 包含句柄的向量。 get(0,'Factory') 返回所有对象类型的所有属性的厂家设置值,用户可以改变它 们的缺省值。厂家设置值返回在一个结构中,域名为 ObjectNamePropertyName',域值为相应属性的厂家设置值。 get(O,'Factoryobject返回对象objectName中属性PropertyNamef的厂家设 NamePropertyName') 置值。 get(0,'Default') 检查有缺省值的对象。结果返回在一个结构中,域名为 ObjectNamePropertyName',域值为相应属性的缺省值。 get(0,'Defaultobject 返回对象ObjectName的属性PropertyName的缺省值。 NamePropertyName') allchild(h) 返回句柄的对象中所有子对象的句柄。隐含句柄也返回,见 表142中Handlevisibility’'。如h是一个标量句柄,则返 回得到一个向量。如知是一个向量,则返回一个细胞矩阵。 findobj 返回一个根对象和它的所有子对象的句柄向量。 findobj(h,prstr,alt,如果给出参数prstr和ali,则返回一个向量,包含将属性 .) prstr设置为alt的所有对象的句柄。在它们之后还可以写 上几个属性。如果给出参数h,就限制在h中的对象和它们 的子对象中搜索。如果没有给出prstr和alt,则返回一个 包含向量h中的对象的子对象句柄向量。 findobj(h,'flat', 同上,但是不检查对象的子对象。 prstr,alt,··.) findall(h) 和findobj(h)相似,而且还返回子对象的隐含句柄,见 表14-2中Handlevisibi1ity'。 copyobj(h,p) 复制对象和它们的子对象。向量勤中包含要复制的对象句柄, 向量即中包含的它们父对象的句柄。这些父对象的类型必须和 原来的父对象相同。函数返回一个包含新对象的句柄向量。 ishandle(h) 检查向量h中的元素是否是对象的句柄。函数返回元素是0
‘O b j e c t N a m e P r o p e r t y N a m e’,域值是相应的属性缺省值。 注意:只返回值为字符串的属性。 s e t ( 0 , ’ D e f a u l t O b j e c t 返回一个细胞向量,它包含有对象名为O b j e c t N a m e、属性 N a m e P r o p e r t y N a m e ’ ) 名为P r o p e r t y N a m e的缺省值。注意:只返回值为字符 串的属性。 s e t ( h , p r s t r ) 返回一个细胞向量,包含句柄 h的对象中属性名为 p r s t r的 所有可能值。 g e t ( h ) 列出句柄h的对象所有属性和相应的值。所有这些都返回在 一个结构中,域名为属性的名字,域值为相应的属性值。 g e t ( h , p r s t r ) 返回句柄h的对象且属性名为p r s t r的当前值。 g e t ( h , p n ) 返回一个细胞矩阵,元素 (i, j)的值是句柄 h(i)的对象且属 性名为p n(j)的属性值。参数 p n是一个细胞向量, h是一个 包含句柄的向量。 g e t ( 0 , ’ F a c t o r y ’ ) 返回所有对象类型的所有属性的厂家设置值,用户可以改变它 们的缺省值。厂家设置值返回在一个结构中,域名为 ‘O b j e c t N a m e P r o p e r t y N a m e’,域值为相应属性的厂家设置值。 g e t ( 0 ,’F a c t o r y O b j e c t 返回对象O b j e c t N a m e中属性P r o p e r t y N a m e的厂家设 N a m e P r o p e r t y N a m e ’ ) 置值。 g e t ( 0 , ’ D e f a u l t ’ ) 检查有缺省值的对象。结果返回在一个结构中,域名为 ‘O b j e c t N a m e P r o p e r t y N a m e’,域值为相应属性的缺省值。 g e t ( 0 , ’ D e f a u l t O b j e c t 返回对象O b j e c t N a m e的属性P r o p e r t y N a m e的缺省值。 N a m e P r o p e r t y N a m e ’ ) a l l c h i l d ( h ) 返回句柄h(i)的对象中所有子对象的句柄。隐含句柄也返回,见 表1 4 - 2中‘H a n d l e V i s i b i l i t y’。如果h是一个标量句柄,则返 回得到一个向量。如果h是一个向量,则返回一个细胞矩阵。 f i n d o b j 返回一个根对象和它的所有子对象的句柄向量。 f i n d o b j ( h , p r s t r ,a l t, 如果给出参数p r s t r和a l t,则返回一个向量,包含将属性 . . . ) p r s t r设置为a l t的所有对象的句柄。在它们之后还可以写 上几个属性。如果给出参数 h,就限制在h中的对象和它们 的子对象中搜索。如果没有给出 p r s t r和a l t,则返回一个 包含向量h中的对象的子对象句柄向量。 f i n d o b j (h, ’f l a t’ , 同上,但是不检查对象的子对象。 p r s t r , a l t ,. . .) f i n d a l l ( h ) 和f i n d o b j ( h )相似,而且还返回子对象的隐含句柄,见 表1 4 - 2中‘H a n d l e V i s i b i l i t y’。 c o p y o b j ( h , p ) 复制对象和它们的子对象。向量h中包含要复制的对象句柄, 向量p中包含的它们父对象的句柄。这些父对象的类型必须和 原来的父对象相同。函数返回一个包含新对象的句柄向量。 i s h a n d l e ( h ) 检查向量h中的元素是否是对象的句柄。函数返回元素是 0 第1 4章 高 级 图 形 2 5 3 下载
254 MATLAB5手册 China-pub.com 下载 和1的向量。如果h中的元素是一个对象的句柄,则在向量 的相应位置为1:否则为0 setuprop(h,prstr,val)用户可以对图和轴类型的对象定义新的属性。在字符串 prstri中给出句柄为h的对象新属性,属性值设置为值val, prstr和val可以为任何值。除非属性prstr已经存在,否则 就新建。 getuprop(h,prstr) 获取句柄为h的图形对象或者轴对象中用户自定义的属性 prstr的属性值。 clruprop(h,prstr) 删除句柄为h的图形对象或者轴对象中用户自定义的属性 prstro handle2struct(h) 将向量h中的句柄对象层次变换成一个结构,这个结构有 如下的域: .type 对象的类型。 properties包含属性值的一个结构。 children 一个结构矩阵,元素是句柄向量h中的对象的 每个子对象。 handle 对象的句柄。 .special 非文件式成员。 struct2handle(s) 命令nandle2 struct的逆操作:将结构变换成对象的层次。 MATLAB5有一个名为propedit的工具,是属性编辑器。这个编辑器比低级命令set和 get用起来更方便。在建立图形用户界面时,这个工具显得更加有用,见命令集170。 而且,还有三个函数可以获取当前图形对象的句柄。 命令集155 当前对象 gcf 获取当前图形对象的句柄。 gca 获取当前轴对象的句柄。 gco(h) 获取当前对象的句柄,也就是鼠标最后点击的对象。如果给出 了h,则获取句柄为h的窗口中当前对象的句柄。 ■例14.4 下面的命令用来获取当前窗口和轴的属性: get(gcf); 号获取当前图形对象的属性。 get(gca); 号获取当前轴对象的属性。 ■例14.5 也可用subploti命令移动对象。假设有两个子图,一个是牙刷,另一个是牙膏,如图-6所示。 要获取下图的位置,可以输入:
和1的向量。如果h中的元素是一个对象的句柄,则在向量 的相应位置为1;否则为0 s e t u p r o p ( h , p r s t r , v a l )用户可以对图和轴类型的对象定义新的属性。在字符串 p r s t r中给出句柄为 h的对象新属性,属性值设置为值 v a l, p r s t r和v a l可以为任何值。除非属性 p r s t r已经存在,否则 就新建。 g e t u p r o p ( h , p r s t r ) 获取句柄为 h的图形对象或者轴对象中用户自定义的属性 p r s t r的属性值。 c l r u p r o p ( h , p r s t r ) 删除句柄为 h的图形对象或者轴对象中用户自定义的属性 p r s t r。 h a n d l e 2 s t r u c t ( h ) 将向量 h中的句柄对象层次变换成一个结构,这个结构有 如下的域: .t y p e 对象的类型。 .p ro p e rt i e s 包含属性值的一个结构。 .c h i l d re n 一个结构矩阵,元素是句柄向量 h中的对象的 每个子对象。 .h a n d l e 对象的句柄。 .s p e c i a l 非文件式成员。 s t r u c t 2 h a n d l e ( s ) 命令h a n d l e 2 s t r u c t的逆操作:将结构s变换成对象的层次。 M ATLAB 5有一个名为p r o p e d i t的工具,是属性编辑器。这个编辑器比低级命令 s e t和 g e t用起来更方便。在建立图形用户界面时,这个工具显得更加有用,见命令集 1 7 0。 而且,还有三个函数可以获取当前图形对象的句柄。 命令集1 5 5 当前对象 g c f 获取当前图形对象的句柄。 g c a 获取当前轴对象的句柄。 g c o ( h ) 获取当前对象的句柄,也就是鼠标最后点击的对象。如果给出 了h,则获取句柄为h的窗口中当前对象的句柄。 ■ 例1 4 . 4 下面的命令用来获取当前窗口和轴的属性: g e t ( g c f ) ; % 获取当前图形对象的属性。 g e t ( g c a ) ; % 获取当前轴对象的属性。 ■ 例1 4 . 5 也可用s u b p l o t命令移动对象。假设有两个子图,一个是牙刷,另一个是牙膏,如图1 4 - 6所示。 要获取下图的位置,可以输入: 2 5 4 M ATLAB 5 手册 下载 ■
China-pub.com 第14章高级图形 255 下载 subplot(2,1,2); get(gca,'Position') ans 0.13000.11000.77500.3400 移动对象,可以输入: set(gca,'Posit1on',[0.150.490.7750.34]) 得到图14-7。这样轴对象就放在另一个图的上面。 0.102a3405BQ7cn9 图14-6 subplot创建的两个轴对象 图147将牙音放在牙刷上的操作 还有一些函数用来删除对象、恢复缺省值和保存对象到文件中。 命令集156 其他通用函数 clf 清除当前窗口。 clf reset 清除当前窗口,除Position、Units、PaperPosition和 PaperUnits外,重新设置所有图形对象的属性,见表14-6. cla 删除当前坐标系。 cla reset 删除当前坐标系。除Position和Units外,重新设置所有 轴对象的属性,见表14-10。 rotate(h,ax,a,o)计算对象h中角a绕轴ax旋转的角度,可选参数o给出旋转的 起始位置,缺省值为[000]。 remapfig(pos, 将子对象移动到具有句柄fig的图形对象中。由pos规定内部 newpos,fig,h) 区域大小的每个子对象移动到newpos规定的新位置。参数 pos和newpos都是这样的形式[left bottom width height]。一个 轴对象的整个区域为[0011]。如果没有指定fg,就使用缺 省值。如果给出h,则只移动向量h中的子对象。 reset(h) 恢复具有句柄h的窗口(图形对象)或者坐标系轴对象)的缺省值。 delete(h) 删除具有句柄h的对象。 close(h) 关闭当前窗口。如果给出h,则关闭h中的窗口。参数h可以 是一个标量,也可以是包含有轴对象句柄的向量或者矩阵。 close name 关闭名为name的窗口
移动对象,可以输入: 得到图1 4 - 7。这样轴对象就放在另一个图的上面。 还有一些函数用来删除对象、恢复缺省值和保存对象到文件中。 命令集1 5 6 其他通用函数 c l f 清除当前窗口。 clf reset 清除当前窗口,除P o s i t i o n、U n i t s、P a p e r P o s i t i o n和 P a p e r U n i t s外,重新设置所有图形对象的属性,见表1 4 - 6。 c l a 删除当前坐标系。 cla reset 删除当前坐标系。除 P o s i t i o n和U n i t s外,重新设置所有 轴对象的属性,见表1 4 - 1 0。 r o t a t e ( h , a x , a ,o) 计算对象 h中角a绕轴a x旋转的角度,可选参数 o给出旋转的 起始位置,缺省值为[0 0 0]。 r e m a p f i g ( p o s , 将子对象移动到具有句柄f i g的图形对象中。由p o s规定内部 n e w p o s , f i g ,h) 区域大小的每个子对象移动到 n e w p o s规定的新位置。参数 p o s和n e w p o s都是这样的形式[left bottom width height]。一个 轴对象的整个区域为 [0 0 1 1]。如果没有指定 f i g,就使用缺 省值。如果给出h,则只移动向量h中的子对象。 r e s e t ( h ) 恢复具有句柄h的窗口(图形对象)或者坐标系(轴对象)的缺省值。 d e l e t e ( h ) 删除具有句柄h的对象。 c l o s e ( h ) 关闭当前窗口。如果给出 h,则关闭 h中的窗口。参数 h可以 是一个标量,也可以是包含有轴对象句柄的向量或者矩阵。 close name 关闭名为n a m e的窗口。 第1 4章 高 级 图 形 2 5 5 下载 图14-6 subplot创建的两个轴对象 图14-7 将牙膏放在牙刷上的操作 ■
256 MATLAB5手册 China-pub.coM 下载 close all 关闭所有没有隐含句柄的窗口,隐含句柄可通过属性 Hand1 evisibi1ity来设置,见表14-2。 close all hidden 关闭所有窗口,包括有隐含句柄的窗口。 status-=close(,··)如果相应的窗口已关闭,则令status为l:否则为0。 hgsave(h,filename) 将具有句柄h的对象及其他的子对象保存到文件filenamer中。 如果filename缺少后缀名,则加上.fig。 hgload(filename) 从文件filename中读取对象和它的子对象(如果有的话)。如果 filename缺少后缀名,则加上fig。最后返回读取对象的句柄。 14.2.2共有属性和方法 由于继承,对于所有类型的对象有一些相同的属性和方法。然而这些当中有一部分对有 些对象来说是没有意义的:见属性表和每种类型对象的方法。 表14-2共有属性和方法 ButtonDownFcn 当对象被鼠标选择时,返回MATLAB回调字符串 Children 对象的所有子对象句柄的向量 clipping 数据限幅模式,‘o'(缺省值):只显示在坐标轴界限内的部分图形对 象:oEE':没有这个限制,也显示坐标轴外的部分 CreateFcn 决定用什么样的M文件或者MATLAB命令来创建对象。这必须用缺省值, 例如创建一个图形对象: set(0,'DefaultFigurecreateFcfunction}其中字符串 function是M文件名或者MATLAB命令 DeleteFcn 决定删除对象时运行的M文件或者MATLAB命令 BusyAction MATLAB处理对象的回调函数中断方式。如果将Interruptible(见 下面命令),设置为off',BusyAction可以有下面几种情况: queue' (缺省值)将回调函数的中断请求放入一个挂起队列中直 到对象的回调函数完成 ‘cancel' 忽略其他回调函数所有可能的中断 Handlevisibility 对象的子对象列表中的对象句柄是否可访问:见Children on' (缺省值)总是可访问 ‘ca11back' 只有回调函数或者调用回调函数的函数可以访问,这样 防止用户从命令行中对对象进行修改 “off" 不可访问 HitTest 对象是否被鼠标选中,也就是这个对象是否为当前对象。H1 tTest可以 设置为‘on'(缺省值)或者‘off'。也可参见命令集155中的命令gco和 表14-7中的轴对象属性Currentobject. Interruptible 指定对象回调字符串是否可中断。如果Interruptible是‘on'(缺 省值),则该对象回调函数可以被其他回调中断。如果Interruptible是 “off',则该对象回调函数不能被其他回调中断 Parent 对象的父对象句柄
2 5 6 M ATLAB 5 手册 close all 关闭所有没有隐含句柄的窗口,隐含句柄可通过属性 H a n d l e V i s i b i l i t y来设置,见表1 4 - 2。 close all hidden 关闭所有窗口,包括有隐含句柄的窗口。 s t a t u s = c l o s e (. . .) 如果相应的窗口已关闭,则令 s t a t u s为1;否则为0。 h g s a v e ( h , f i l e n a m e ) 将具有句柄 h的对象及其他的子对象保存到文件 f i l e n a m e中。 如果f i l e n a m e缺少后缀名,则加上.f i g。 h g l o a d ( f i l e n a m e ) 从文件f i l e n a m e中读取对象和它的子对象(如果有的话)。如果 f i l e n a m e缺少后缀名,则加上.f i g。最后返回读取对象的句柄。 14.2.2 共有属性和方法 由于继承,对于所有类型的对象有一些相同的属性和方法。然而这些当中有一部分对有 些对象来说是没有意义的;见属性表和每种类型对象的方法。 表14-2 共有属性和方法 B u t t o n D o w n F c n 当当对象被鼠标选择时,返回 M AT L A B回调字符串 C h i l d r e n 当对象的所有子对象句柄的向量 C l i p p i n g 当数据限幅模式, ‘o n’(缺省值):只显示在坐标轴界限内的部分图形对 象;‘o f f’:没有这个限制,也显示坐标轴外的部分 C r e a t e F c n 当决定用什么样的M文件或者M AT L A B命令来创建对象。这必须用缺省值, 例如创建一个图形对象: 当set(0,’DefaultFigureCreateFcn’, function),其中字符串 f u n c t i o n是M文件名或者M AT L A B命令 D e l e t e F c n 当决定删除对象时运行的M文件或者M AT L AB命令 B u s y A c t i o n 当M AT L A B处理对象的回调函数中断方式。如果将 I n t e r r u p t i b l e (见 下面命令),设置为‘o f f’,B u s y A c t i o n可以有下面几种情况: 当‘q u e u e’ (缺省值)将回调函数的中断请求放入一个挂起队列中直 到对象的回调函数完成 ‘c a n c e l’ 忽略其他回调函数所有可能的中断 H a n d l e V i s i b i l i t y 当对象的子对象列表中的对象句柄是否可访问;见 C h i l d r e n ‘o n’ (缺省值)总是可访问 ‘c a l l b a c k’ 只有回调函数或者调用回调函数的函数可以访问,这样 防止用户从命令行中对对象进行修改 ‘o f f’ 不可访问 H i t T e s t 当对象是否被鼠标选中,也就是这个对象是否为当前对象。 H i t T e s t可以 设置为‘o n’(缺省值)或者‘o f f’。也可参见命令集 1 5 5中的命令g c o和 表1 4 - 7中的轴对象属性C u r r e n t O b j e c t。 Interruptible 当指定对象回调字符串是否可中断。如果 I n t e r r u p t i b l e是‘o n’(缺 省值),则该对象回调函数可以被其他回调中断。如果 I n t e r r u p t i b l e是 ‘o f f’,则该对象回调函数不能被其他回调中断 Parent 当对象的父对象句柄 下载
China-bub.com 第14章高级图形 257 下载 续) Selected 对象是否被选中,值可以为‘on'或者off selectionHighlight 在屏幕上选中的对象是否有四个边句柄和四个点句柄。值可以为‘o'(缺省 值)或者off Tag 用户用来标识对象的字符串,在建立图形接口时这很有用 Type 只读对象类型的字符串 UserData 是一个矩阵,包含有用户要在对象中保存的数据。矩阵不被对象本身使用 UIContextMenu 和对象相联的快捷菜单句柄。当在对象上按下鼠标右键时,MATLAB显示出 快捷菜单。见14.2.8节 visible 控制对象在屏幕是否可见。值可以为on'(缺省值)或者'of 14.2.3根对象 上面提到屏幕是一个根对象,它是所有其他对象的父对象。MATLAB中可以用set和get设 置和获取它的一些属性。根对象有如下的属性和方法。 表14-3根对象的常用属性和方法 Automatic-FileUpdates 值可为‘on’或者off',它的使用是非文件式的 Callbackobject 获取正在执行的回调函数的对象句柄。如果没有回调函数在执行,则返回 []。也可参见命令集171中的命令gcob Language 系统环境变量,它的使用是非文件式的 CurrentFigure 获取当前图形对象的句柄。如果不存在图形对象,则返回[]。也可参见命 令集155中的命令gcf Diary 一个决定是否将命令窗口中的输入输出存入文件的字符串。值可为“o 或者“off’(缺省值) DiaryFile 一个表示保存输入输出文件名的字符串,见Diary Echo 在文件执行时,是否显示M文件的每一行。值可为on‘或者oEf'(缺省值) ErrorMessage 包含MATLAB最近一次错误信息的字符串 Format 控制MATLAB数字显示格式的字符串。可选择的值有:‘short'、 shortE'(缺省值)、shortG'、1ong'、1ongE'、longG'、bank'、 hex'、+'和‘rational Formatspacing 控制MATLAB在命令窗口中输出间隔行的字符串。值可以为1oose'(缺 省值)和compact' PointerLocation 相对屏幕左下角指针的当前位置向量。 Pointerwindow 含有鼠标指针的图形只读句柄。如果鼠标不在任何MATLAB图形窗口中, 则值为0 Profile 决定是否使用prof1le工具的字符串。当程序执行时,这个工具可以测出 程序的不同部分运行所需的时间。值可以为o'或者off'(缺省值) ProfileFile 控制profile数据保存到什么样的文件中(见上) ProfileCount 是一个包含profile数据的n×1向量。向量中的元素k是M文件在运行时 在k行找到profile工具的次数 ProfileInterval 在一定时间间隔内,profile工具检查正在运行的脚本文件的行数 RecursionLimit 限定嵌套递归的次数。如果超过这个次数,MATLAB会给出一个错误信息 ScreenDepth 整数,指定以比特为单位的屏幕颜色深度
(续) Selected 当对象是否被选中,值可以为 ‘o n’或者‘o f f’ SelectionHighlight 当在屏幕上选中的对象是否有四个边句柄和四个点句柄。值可以为 ‘o n’(缺省 值)或者‘o f f’ T a g 当用户用来标识对象的字符串,在建立图形接口时这很有用 T y p e 当只读对象类型的字符串 UserData 当是一个矩阵,包含有用户要在对象中保存的数据。矩阵不被对象本身使用 U I C o n t e x t M e n u 当和对象相联的快捷菜单句柄。当在对象上按下鼠标右键时, M AT L A B显示出 快捷菜单。见1 4 . 2 . 8节 V i s i b l e 当控制对象在屏幕是否可见。值可以为 ‘o n’(缺省值)或者’o f f’ 14.2.3 根对象 上面提到屏幕是一个根对象,它是所有其他对象的父对象。 M AT L A B中可以用s e t和g e t设 置和获取它的一些属性。根对象有如下的属性和方法。 表14-3 根对象的常用属性和方法 Automatic-FileUpdates 值值可为‘o n’或者‘o f f’,它的使用是非文件式的 C a l l b a c k O b j e c t 值获取正在执行的回调函数的对象句柄。如果没有回调函数在执行,则返回 [ ]。也可参见命令集1 7 1中的命令g c o b L a n g u a g e 值系统环境变量,它的使用是非文件式的 C u r r e n t F i g u r e 值获取当前图形对象的句柄。如果不存在图形对象,则返回 [ ]。也可参见命 令集1 5 5中的命令g c f D i a r y 值一个决定是否将命令窗口中的输入输出存入文件的字符串。值可为 ‘o n’ 或者‘o f f’(缺省值) D i a r y F i l e 值一个表示保存输入输出文件名的字符串,见 D i a r y Echo 值在文件执行时,是否显示M文件的每一行。值可为‘o n‘或者‘o f f’(缺省值) ErrorMessage 值包含M AT L A B最近一次错误信息的字符串 Format 值控制M AT L A B数字显示格式的字符串。可选择的值有: ‘s h o r t’、 ‘s h o r t E’(缺省值)、‘s h o r t G’、‘l o n g’、‘l o n g E’、‘l o n g G’、‘b a n k’、 ‘h e x’、‘+’和‘r a t i o n a l’ FormatSpacing 值控制M AT L A B在命令窗口中输出间隔行的字符串。值可以为 ‘l o o s e’(缺 省值)和‘c o m p a c t’ PointerLocation 值相对屏幕左下角指针的当前位置向量。 PointerWindow 值含有鼠标指针的图形只读句柄。如果鼠标不在任何 M AT L A B图形窗口中, 则值为0 Profile 值决定是否使用p r o f i l e工具的字符串。当程序执行时,这个工具可以测出 程序的不同部分运行所需的时间。值可以为 ‘o n’或者‘o f f’(缺省值) ProfileFile 值控制p r o f i l e数据保存到什么样的文件中(见上) ProfileCount 值是一个包含p r o f i l e数据的n×1向量。向量中的元素k是M文件在运行时 在k行找到p r o f i l e工具的次数 P r o f i l e I n t e r V a l 值在一定时间间隔内,p r o f i l e工具检查正在运行的脚本文件的行数 RecursionLimit 值限定嵌套递归的次数。如果超过这个次数, M AT L A B会给出一个错误信息 ScreenDepth 值整数,指定以比特为单位的屏幕颜色深度 第1 4章 高 级 图 形 2 5 7 下载