20.11 M文件例子 精通MATLAB工具箱含有许多实用函数,它们可以验证本章的许多概念。这些函数的基本部分已经在二维和三维图形这些章阐述过了。有了前面对句柄图形的讨论,我们现在可以更彻底地讨论这些函数。 最简单的精通MATLAB工具箱的函数之一提出了一个共同的问题。MATLAB函数gcf返回当前图形的句柄。但是,它有一个副作用。如果图形不存在,gcf就创建一个,并返回它的句柄。如果想寻找一个图形是否存在于头一个位置,要是没有,又不得不创建,怎么办?函数mmgcf正好实现由其内容所描述的工作。 function HF=mmgcf %MMGCF Get Current Figure if it Exists. % MMGCF returns the handle of the current figure if it exists. % If no current figure exists,MMGCF returns an empty handle. % % Note that the function GCF is different.It creates a figure and returns its handle if it does not % exist. % Copyright (c) 1996 by Prentice-Hall,Inc. Hf=get(0, ‘Children’ ); % check for figure children if isempty(Hf) return else Hf=get(0, ‘CurrentFigure’ ); end 函数mmgcf首先检查根对象的子对象的图形是否存在,如至少有一个图形对象时,根对象的 ‘CurrentFigure’ 属性就返回当前的图形。 函数mmgca为坐标轴对象执行同样的功能,如同在它的M文件内所描述的那样。 function Ha=mmgca %MMGCA Get Current Axes if it exists. % MMGCA returns the handle of the current axes if it exists. % If no current axes exists,MMGCA returns an empty handle. % % Note that the function GCA is diffent.It create a figure and an axes and returns the axes % handle if they do not exist. % Copyright (c) 1996 by Prentice-Hall,Inc. Ha=findobj(0, ‘Type’ , ‘axes’ ); if isempty(Ha) return else Ha=get(get(0, ‘CurrentFigfure’ ), ‘CurrentAxes’ ); end 由于函数gco已经表现出当对象不存在时返回空矩阵的行为特性,就不需要函数mmgco了。 在精通MATLAB工具箱中的另一个函数是mmzap,在二维图形那一章里已作过介绍。如下M文件中所示,它使用mmgcf作错误检查,与findobj和get一起删除一个指定的图形。 function mmzap(arg) %MMZAP Delete graphics object using mouse. % MMZAP waits for a mouse click on an object in a figure window and deletes the object. % MMZAP or MMZAP text erases text objects. % MMZAP axes erases axes objects. % MMZAP line erases line objects. % MMZAP surf erases surface objects. % MMZAP patch erases patch objects. % % Clicking on an object other than the selected type or striking a key on the keyboard aborts % the command. % Copyright (c) 1996 by Prentice-Hall,Inc. if nargin<1,arg= ‘text’ ;end Hf=mmgcf; if isempty(Hf),error( ‘No Figure Available.’ ),end if length(findobj(0, ‘Type’ , ‘figure’ ))==1 figure(Hf) % bring only figure forword end key=waitforbuttonpress; % pause untill user takes some action if key % key on keyboard pressed return % take no action else % object selected object=gco % get object selected by buttonpress type=get(object, ‘Type’ ); if all(type(1:4)==arg(1:4)) % delete only if ‘Type’ is correct delete(object) end end 在编写句柄图形函数的M文件时,函数mmzap描述了一种很有用的技术。它利用函数waitforbuttonpress和gco的结合用鼠标来获取所选定对象的句柄。waifortbuttonpress是一个MATLAB内置函数,它的功能是等待鼠标点击或按键。它的帮助文本如下: ? help waitforbuttonpress WAITFOR BUTTONPRESS Wait for key/buttonpress over figure. T= WAITFOR BUTTONPRESS stops program execution untill a key or mouse button is pressed over a figure window.Returns 0 when terminated by a mouse buttonpress,or 1 when terminated by a keypress.Additional information about the terminating event is available from the current figure. See also GINPUT,GCF. 帮助信息: WAITFORBUTTONPRESS等待一个鼠标/按钮对图形按下。 T=WAITFORBUTTONPRESS停止程序的执行,直到鼠标按钮或键在一个图形窗口按下。当 鼠标按钮按下时返回0;当键按下时返回1。其它的结束事件的信息可从当前的图形中窗口 获取。 参阅GINPUT和GCF。 鼠标按钮在鼠标指针指的图形上按下后,函数gco返回所点中对象的句柄。然后,该句柄可用来操作选中的对象。在精通MATLAB工具箱中,用这种简单的选择技术的函数还有mmline和mmaxes。其中,mmline的M文件描述如下: function mmline(arg1,arg2, arg3, arg4, arg5, arg6) %MMLINE Set Line Properties Using Mouse % MMLINE waites for a mouse click on a line then applies the desired properties to the % selected line. % Properties are given in parts,e.g.,MMLINE Name value... % Properties: % NAME VALUE{default} % color [Y m c r g b w k] or an RGB in quotes: ‘[r g b]’ % style [- -- ; -.] % mark [o + . * X] % width points for linewidth {0.5} % size points for marker size {6} % zap (n.a.) delete selected line % Examples: % MMLINE color r width 2 sets color to red and width to 2 points % MMLINE mark + size 8 sets marker type to + and size to 8 points % % Clicking on an object other than a line,or striking a key on the keyboard aborts the % command. % Copyright (c) 1996 by Prentice-Hall,Inc. Hf=mmgcf; if isempty(Hf),error( ‘No Figure Avaiable.’ ),end if length(get(0, ‘Children’ ))==1 figure(Hf) % bring only figure forword end key=waitforbuttonpress; if key % key on keyboard pressed return else % object selected Hl=gco if strcmp(get(Hl, ‘Type’ ), ‘line’ ) % line object selected for i=1:2:max(nargin-1,1) Name=eval(sprintf( ‘arg%.0f ‘ ,i),[]); get Name argument if strcmp(Name, ‘zap’ ) delete(Hl),return end value=eval(sprintf( ‘arg%.0f ‘ ,i+1),[]); % get value if strcmp(Name, ‘color’ ) set(Hl, ‘Color’ ,value) elseif strcmp(Name, ‘style’ ) set(Hl, ‘Linestyle’ ,value) elseif strcmp(Name, ‘mark’ ) set(Hl, ‘Linestyle’ ,value) elseif strcmp(Name, ‘width’ ) value=abs(eval(value)) set(Hl, ‘LineWidth’ ,value) elseif strcmp(Name, ‘size’ ) value=abs(eval(value)) set(Hl, ‘MarkerSize’ ,value) else disp([ ‘Unknown Property Name: ‘ Name’]) end end end end 精通MATLAB工具箱中的函数mmpaper以简单的方式阐述了对纸张属性的使用。如下所示,函数mmpaper设置当前图形的纸张属性,并将所有以后的图形设成缺省值。函数mmpage在下一章讨论,它是一个mmpaper友函数。mmpage建立一个图形用户界面,设定图形在打印页上的位置。 function mmpaper(arg1,arg2,arg3,arg4,arg5,arg6) %MMPAPER Set Default Paper Properties. % MMPAPER Name value... % sets default paper properties for the current figure and succeeding figures based on Name % value pairs. % Properties: % NAME VALUE {default} % Units [{inches},centimeters,points,normal] % orient [{portrait},landscape] % type [{usletter},uslegal,a3,a4letter,a5,b4,tabloid] % % Examples: % MMPAPER Units inch orient landscape % MMPAPER type tabloid % % MMPAPER with no arguments returns the current paper defaults. % Copyright (c) 1996 by Prentice-Hall,Inc. Hf=mmgcf; flag=0; if isempty(Hf) flag=1; Hf=figure( ‘Visible’ , ‘off ‘ ); end if nargin for i=1:2:max(nargin-1,1) Name=eval(sprintf( ‘arg%.0f ‘ ,i)0,[]); % get Name argument value=eval(sprintf( ‘arg%.0f ‘ ,i+1)0,[]); % get Name argument if Name(1)== ‘o’ set(0, ‘DefaultFigurePaperOrientation’ ,value) set(Hf, ‘PaperOrientation’ ,value) elseif Name(1)== ‘t’ set(0, ‘DefaultFigurePaperType’ ,value) set(Hf, ‘PaperType’ ,value) elseif Name(1)== ‘u’ set(0, ‘DefaultFigurePaperUnits’ ,value) set(Hf, ‘PaperUnits’ ,value) else disp([ ‘Unknown Property Name:’ Name]) ens end end 当把对象放在一个特定的位置时,有时在象素和归一化坐标之间进行转化是很有用的。在精通MATLAB工具箱中有两个函数进行这种转换。第一个是mmpx2n,它将象素转化为归一化坐标;第二个是mmn2px,它进行相反的转换。这些函数演示了如何以所需的一组单位获取 ‘Position’ 属性值。首先,把对象的当前 ‘Units’ 属性保存起来;然后,将 ‘Units’ 属性设成所需的值并获取所需的 ‘Position’ 属性值;最后,将 ‘Units’ 的值恢复为初始值。mmpx2n的M文件描述如下: function Y=mmpx2n(X,Hf) %MMPX2N Pixel to Normalized Coordinate Transformation. % MMPX2N(X) converts the Position vector X from pixel coordinates to normalized % coordinates w.r.t.the computer screen. % % MMPX2N converts the Position vector X from pixel coordinate to narmalized coordinates % w.r.t.the figure windoiw having handle H. % % X=[left bottom width height] or X=[width height] % Copyright (c) 1996 by Prentice-Hall,Inc. msg= ‘Input is not a pixel Position vector.’ ; lx=length(X); sz= ‘Position’ ; if nargin==1,Hf=0;sz= ‘ScreenSize’ ;end if any(X<1)| (lx~=4&lx~=2) error(msg) end if lx==2,X=[1 1 X(:)’ ];end % [width height] input format u=get(Hf, ‘Units’ ); % get Units set (Hf, ‘Units’ , ‘pixels’ ); % set Units to pixels s=get(Hf,sz); Y=(X-1)./([s(3:4)]-1); % convert set(Hf, ‘Units’ ,u); % reset Units if any(Y>1) error(msg) end if lx==2,Y=Y(3:4);end % [width height] output format 精通MATLAB工具箱中的两个函数mmcont2和mmcont3都用用户指定的颜色映象画等值线图。每一个函数分析输入参量并建立一个字符串,它包含了颜色的说明。一旦设置了字符串,就设置了当前坐标轴的 ‘ColorOrder’ 属性;最后,它们分别调用具有合适的参量的函数contour和contour3来画出图形。函数mmcont2的M文件描述如下: function[cs,h]=mmcont2(arg1,arg2,arg3,arg4,arg5) %MMCONT2 2-D contour plot using a colormap. % MMCONT2(X,Y,Z,N,C) plots N contours of Z in 2-D using the color % specified in C.C can be a linestyle and color as used in plot, % e.g., ‘r-’ ,orC can be the string Name of a colormap. X and Y % define the axis limits. % If not given default argument values are: N=10,C= ‘hot’ , % X and Y =row and column indices of Z. Examples: % MMCONT2(Z) 10 lines with hot colormap % MMCONT2(Z,20) 20 lines with hot colormap % MMCONT2(Z, ‘copper’ ) 10 lines with copper colormap % MMCONT2(Z,20, ‘gray’ ) 20 lines with gray colormap % MMCONT2(X,Y,Z, ‘jet’ ) 10 lines with jet colormap % MMCONT2(Z, ‘c-’ ) 10 dashed lines in cyan % MMCONT2(X,Y,Z,25, ‘pink’ ) 25 lines in pink colormap % % CS=MMCONT2(…) returns the contour matrix CS as described in % CONTOURC. % [CS,H]=MMCONT2(…) returns a column vector H of handles to % line objects. % Copyright (c) 1996 by Prentice-Hall,Inc. n=10;c= ‘hot’ ; % default values nargs=nargin;cflag=1; if nargin<1,error( ‘Not enough input arguments.’ ), end for i=2:nargin % check input arguments for N and C argi=eval(sprintf( ‘arg%.0f ‘ ,i)); if ~isstr(argi)&length(argi)==1 % must be N, grab it n=argi; nargs=i; % # args to pass to contour2 elseif isstr(argi) % must be C if exist(argi)==2 % is colormap,so grab it c=argi; nargs=i-1; else % is single color/linestyle cflag=0; nargs=i; end end end if cflag % a colormap has been chosen clf % clear figure view(2) % make it 2-D hold on % hold it mapstr=sprintf([c ‘(%.0f)’ ],n); set(gca,’ColorOrder’,eval(mapstr)); end evalstr=‘[CS,H]=contour(’; for i=1:nargs evalstr=[evalstr sprintf( ‘arg%.0f ‘ ,i) ‘,’ ]; end lstr=length (evalstr); evalstr(lstr:lstr+1)= ‘);’ ; eval(evalstr) hold off if nargout==1, cs=CS; elseif nargout==2, cs=CS;h=H; end 这里要讨论的最后一个精通MATLAB工具箱函数是mmtile。就象在二维函数那一章里所描述的一样,该函数在计算机屏幕上将4个已存在的图形按平铺模式排列起来。函数mmtile.m的内容如下所示: function h=mmtile(n) % MMTILE Tile Figure Windows. % MMTILE with no arguments, tiles the current figure windows % and brings them to the foreground. % Figure size is adjusted so that 4 figure windows fit on the screen. % Figures are arranged in a clockwise fashion starting in the % upper-left corner of the display % % MMTILE(N) makes tile N the current figure if it exists. % Otherwise, the next tile is created for subsequent plotting % % Tiled figure windows are titled TILE #1,TILE #2, TILE #3, TILE #4. % Copyright (c) 1996 by Prentice-Hall,Inc. HT=40; %tile height fudge in pixels WD=20; % tile width fudge % adjust the above as necessary to eliminate tile overlaps % bigger fudge numbers increase gaps between tiles Hf=sort(get(0,‘Children’)); % get handles of current figures nHf=length(Hf); set(0, ‘Units’ ,‘Pixels’) % set screen dimensions to pixels sz=get(0,‘Screensize’); % get screen size in pixels tsz=0.9*sz(3:4); % defaut tile area is almost whole monitor if sz(4)>sz(3), % if portrait monitor tsz(2)=.75*tsz(1); % take a landscape chunk end tsz=min(tsz,[920 690]); % hold tile area on large screens to 920 by 690 t1(1,1)=sz(3)-tsz(1)+1; % left side of left tiles t1(2,1)=t1(1,1)+tsz(1)/2; % left side of right tiles tb(1,1)=sz(4)-tsz(2)+1; % bottom of bottom tiles tb(2,1)=tb(1,1)+tsz(2)/2; % bottom of top tiles tpos=zeros(4); % matrix holding tile Position vectors tpos(:,1)=t1([1 2 2 1],1); % left sides tpos(:,2)=t1([2 2 1 1],1); % bottoms tpos(:,3)=(tsz(1)/2-WD)*ones(4,1); % widths tpos(:,4)=(tsz(2)/2-HT)*ones(4,1); % heights tpos=fix(tpos); % make sure pixel Positions are integers if nargin==0 % tile figures as needed for i=1:min(nHf,4) set(Hf(i),‘Units’,‘pixels’) if any(get(Hf(i),‘Position’)~=tpos(i,:)) set(Hf(i),‘Position’,tpos(i,:),… ‘NumberTitle’,‘off’,… ‘Name’,[‘TILE #’int2str(i)]) end figure(Hf(i)) end else % go to tile N or create it n=rem(abs(n)-1,4)+1; % N must be between 1 and 4 if n<=nHf % tile N exists,make it current figure(Hf(n)) else % tile N does not exist,create next one n=nHf+1; figure(‘Position’,tpos(n,:),… ‘NumberTitle’,‘off’,… ‘Name’,[‘TILE #’int2str(n)]) end end 如上面所描述的,函数mmtile从根对象得到所有的图形对象的句柄和屏幕尺寸,为该图形计算新的位置和尺寸,然后设置每个图形的 ‘Units’ , ‘Position’ , ‘Number’ 和 ‘Name’ 属性。它具有安置和缩放图形的效能,并在每个窗口标题中,改变名字字符串。HT和WT给出的号码与计算机平台有关。它们对图形的 ‘Position’ 描述窗口内的可画区域而不是外部尺寸有补偿作用。 20.12 属性名和属性值 下面各表中列出了MATLAB 4.2版本中的属性名和属性值。有一个星号*的属性是非文件化的。用大括号{}括起来的属性值是缺省值。 表20.3 根对象属性  BlackAndWhite on: {off}: 自动硬件检测标志 认为显示是单色的,不检测; 检测显示类型  *VlaxkOutUnusedSlots 值为[{no}|yes]  *CaptureMap   CaptureMatrix 由CaptureRect矩形所包围的区域内图象数据的只读矩阵,使用image来显示  CaptureRect 捕捉矩形的尺寸和位置,是一个4元素的向量[left,bottom,width,height],单位由Units属性指定。  *CaseSen 值为[{on}|off]  CurrentFigure 当前图形的句柄。  Diary on: {off}: 会话记录 将所有的键盘输入和大部分输出拷贝到文件中 不将输入和输出存入文件  DiaryFile 一个包含diary文件名的字符串,缺省的文件名为diary  Echo on: {off}: 脚本响应模式 在文件执行时,显示脚本文件的每一行 除非指定echo on,否则不响应  Format {short}: shortE: long: longE: hex: bank: +: rat: 数字显示的格式 5位的定点格式 5位的浮点格式 15位换算过的定点格式 15位的浮点格式 16进制格式 美元和分的定点格式 显示+和-符号 用整数比率逼近  FormatSpacing {loose}: compact: 输出间隔 显示附加行的输入 取消附加行的输入  *HideUndocumented no: {yes}: 控制非文件式属性的显示 显示非文件式属性 不显示非文件式属性  PointerLocation 相对于屏幕左下角指针位置的只读向量[left,bottom]或[X,Y],单位由Units属性指定  PointerWindow 含有鼠标指针的图形句柄,如果不在图形窗口内,值为0。  ScreenDepth 整数,指定以比特为单位的屏幕颜色深度,比如:1代表单色,8代表256色或灰度  ScreenSize 位置向量[left,bottom,width,height],其中[left,bottom]常为[0 0],[width,height]是屏幕尺寸,单位由Units属性指定  *StatusTable 向量  *TerminalHideGraphCommand 文本串  TerminalOneWindow no: yes: 由终端图形驱动器使用 终端有多窗口 终端只有一个窗口  *TerminalDimensions 终端尺寸向量[width,height]  TerminalProtocal none: X: tek401x: tek410x: 启动时终端类型设置,然后为只读 非终端模式,不连到X服务器 找到X显示服务器,X Windows模式 Tektronix 4010/4014 仿真模式 Tektronix 4100/4105仿真模式  *TerminalShowGraphCommand 文本串  Units inches: centimeters: normalized: points: {pixels}: Position属性值的度量单位 英寸 厘米 归一化坐标,屏幕的左下角映射到[0 0],右上角映射到[1 1] 排字机的点,等于1/72英寸 屏幕象素,计算机屏幕分辨率的最小单位  *UsageTable 向量  ButtonDowFcn MATLAB回调字符串,当对象被选择时传给函数eval,初始值是一空矩阵  Children 所有图形对象句柄的只读向量  Clipping {on}: off: 数据限幅模式 对根对象无效果 对根对象无效果  Interruptible {no}: yes: ButtonDowFcn回调字符串的可中断性 不能被其它回调中断 可以被其它回调中断  Parent 父对象的句柄,常为空矩阵  *Selected 值为[on|off]  *Tag 文本串  Type 只读的对象辨识字符串,常是root  UserData 用户指定的数据,可以是矩阵、字符串等等  Visible {on}: off: 对象可视性 对根对象无效果 对根对象无效果   表20.4 图形对象属性   BackingStore {on}: off: 为了快速重画,存储图形窗口的拷贝 当一个图原来被覆盖的一部分显露时,拷贝备份,刷新窗口较快,但需要较多的内存 重画图形以前被覆盖的部分,刷新较慢,但节省内存  *CapterMap 矩阵  *Client 矩阵  Color 图形背景色,一个3元素的RGB向量或MATLAB预定的颜色名,缺省的颜色是黑色  Colormap m×3的RGB向量矩阵,参阅函数colormap  *Colortable 矩阵,也许包含一份系统颜色映象的拷贝  CurrentAxes 图形的当前坐标轴的句柄  CurrentCharacter 当鼠标指针在图形窗口中,键盘上最新按下的字符键  CurrentMenu 最近被选择的菜单项的句柄  CurrentObject 图形内,最近被选择的对象的句柄,即由函数gco返回的句柄  CurrentPoint 一个位置向量[left,bottom]或图形窗口的点的[X,Y],该处是鼠标指针最近一次按下或释放时所在的位置。  FixedColors n×3的RGB向量矩阵,它使用系统查色表中的槽来定义颜色,初始确定的颜色是black和white  *Flint   InvertHardcopy {on}: off: 改变图形元素的颜色以打印 将图形的背景色改为白色,而线条、文本和坐标轴改为黑色以打印 打印的输出颜色和显示的颜色完全一致  KeyPressFcn 当鼠标指针处在图形内,按下键,传递给函数 eval 的MATLAB回调字符串  MenuBar {figure}: none: 将MATLAB菜单在图形窗口的顶部显示,或在某些系统中在屏幕的顶部显示 显示缺省的MATLAB菜单 不显示缺省的MATLAB菜单  MinColormap 颜色表输入项使用的最小数目。它影响系统颜色表。如设置太低,会使未选中的图形以伪彩色显示。  Name 图形框架窗口的标题(不是坐标轴的标题)。缺省时是空串,如设为string(字符串),窗口标题变为:Figure No.n:string  NextPlot new: {add}: replace: 决定新图作图行为 画前建立一个新的图形窗口 在当前的图形中加上新的对象 在画图前,将除位置属性外的所有图形对象属性重新设置为缺省值,并删除所有子对象  NumberTitle {on}: off: 在图形标题中加上图形编号 如果Name属性值被设为string,窗口标题是Figure No.N:string 窗口标题仅仅是Name属性字符串  PaperUnits {inches}: centimeters: normalized: points: 纸张属性的度量单位 英寸 厘米 归一化坐标 点,每一点为1/72英寸  PaperOrientation {portrait}: landscape: 打印时的纸张方向 肖像方向,最长页面尺寸是垂直方向 景象方向,最长页面尺寸是水平方向  PaperPosition 代表打印页面上图形位置的向量[left,bottom,width,height],[left,bottom]代表了相对于打印页面图形左下角的位置,[width,height]是打印图形的尺寸,单位由PaperUnits属性指定  PaperSize 向量[width,height]代表了用于打印的纸张尺寸,单位由PaperUnits属性指定,缺省的纸张大小为[8.5 11]  PaperType {usletter}: uslegal1: a3: a4letter: a5: b4: tabloid: 打印图形纸张的类型。当PaperUnits设定为归一化坐标时,MATLAB使用PaperType来按比例调整图形的大小 标准的美国信纸 标准的美国法定纸张 欧洲A3纸 欧洲A4信纸 欧洲A5纸 欧洲B4纸 标准的美国报纸  Pointer crosshair: {arrow}: watch: top1: topr: bot1: botr: circle: cross: fleur: 鼠标指针形状 十字形指针 箭头 钟表指针 指向左上方的箭头 指向右上方的箭头 指向左下方的箭头 指向右下方的箭头 圆 双线十字形 4头箭形或指南针形  Position 位置向量[left,bottom,width,height],[left,bottom]代表了相对于计算机屏幕的左下角窗口左下角的位置,[width,height]是屏幕尺寸,单位由Units属性指定  Resize {on}: off: 允许不允许交互图形重新定尺寸 窗口可以用鼠标来重新定尺寸 窗口不能用鼠标来重新定尺寸  ResizeFcn MATLAB回调字符串,当窗口用鼠标重新定尺寸时传给函数eval  *Scrolled 值为[{on}|off]  SelectionType {normal}: extended: alt: open: 一个只读字符串,提供了有关最近一次鼠标按钮选择所使用方式的信息。但实际是哪个键和/或按钮按下与平台有关 点击(按下和释放)鼠标左键,或只是鼠标按钮 按下shift键并进行多个常规(normal)选择;同时击双按钮鼠标的两个按钮;或点击一个三按钮鼠标的中按钮 按下Control键并进行一次常规选择;或者点击一个双按钮或三按钮鼠标的右按钮 双击任何鼠标按钮  Share Colors no: {yes}: 共享颜色表的槽 不和其它窗口共享颜色表的槽 只要可能,重用颜色表中的槽  *StatusTable 向量  Units inches: centimeters: normalized: points: {pixels}: 各种位置属性值的度量单位 英寸 厘米 归一化坐标,屏幕的左下角映射到 [0 0],右上角映射到 [1 1] 排字机的点,等于1/72英寸 屏幕象素,计算机屏幕分辨率的最小单位  *UsageTable 向量  WindowButtonDownFcn 当鼠标指针在图形内时,只要按一个鼠标按钮, MATLAB回调字符串传递给函数eval  WindowButtonMotionFcn 当鼠标指针在图形内时,只要移动一个鼠标按钮,MATLAB回调字符串传递给函数eval  *WindowID 长整数  ButtonDownFcn 当图形被选中时,MATLAB回调字符串传递给函数eval;初始值是一个空矩阵  Children 图形中所有子对象句柄的只读向量;坐标轴对象,uicontrol对象和uimenu对象  Clipping {on}: off: 数据限幅模式 对图形对象不起作用 对图形对象不起作用  Interruptible {no}: yes: 指定图形回调字符串是否可中断 不能被其它回调中断 可以被其它回调中断  Parent 图形父对象的句柄,常是0  *Selected 值为[on|off]  *Tag 文本串  Type 只读的对象辨识字符串,常是figure  UserDate 用户指定的数据,可以是矩阵、字符串等等  Visible {on}: off: 图形窗口的可视性 窗口在屏幕上可视 窗口不可视   表20.5 坐标轴对象属性   AspectRatio 纵横比向量[axis_ratio,data_ratio],这里axis_ratio是坐标轴对象的纵横比(宽度/高度),data_ratio是沿着水平轴和垂直轴的数据单位的长度比。如设置,则MATLAB建立一个最大的坐标轴,保留这些比率,该最大轴将在Position定义的矩形内拟合。该属性的缺省值为[NaN,NaN]  Box on: {off}: 坐标轴的边框 将坐标轴包在一个框架或立方体内 不包坐标轴  CLim 颜色界限向量[cmin cmax],它确定将数据映射到颜色映象。cmin是映射到颜色映象第一个入口项的数据,cmax是映射到最后一项的数据。参阅函数cmais  CLimMode {auto}: manual: 颜色限制模式 颜色界限映成轴子对象的数据整个范围 颜色界限并不自动改变。设置CLim就把CLimMode值设为人工  Color 坐标轴背景颜色。一个三元素的RGB向量或一个预定义的颜色名。缺省值是none,它使用图形的背景色  ColorOrder 一个m×3 RGB值矩阵。如果线条颜色没有用函数plot和plot3指定,就用这些颜色。缺省的ColorOrder为黄,紫红,洋红,红,绿和蓝  CurrentPoint 包含在坐标轴空间内的一对点的坐标矩阵,它定义了从坐标空间前面延伸到后面的一条三维直线。其形式是[xb yb zb :xf yf zf]。单位在Units属性中指定。点[xf yf zf]是鼠标在坐标轴对象中上一次点击的坐标  DrawMode {normal}: fast: 对象生成次序 将对象排序,然后按照当前视图从后向前绘制 按已建立的次序绘制对象,不首先排序  *ExpFontAngle 值为[{normal}|italic|oblique]  *ExpFontName 缺省值为Helvetica  *ExpFontSize 缺省值为8点  *ExpFontStrikeThrough 值为[on|{off}]  *ExpFontUnderline 值为[on|{off}]  *ExpFontWeight 值为[light|{normal}|demi|bold]  FontAngle {normal}: italic: oblique: 坐标轴文本为斜体 正常的字体角度 斜体 某些系统中为斜体  FontName 坐标轴单位标志的字体名。坐标轴上的标志并不改变字体,除非通过设置XLabel,YLabel和ZLable属性来重新显示它们。缺省的字体为Helvetica  FontSize 坐标轴标志和标题的大小,以点为单位,缺省值为12点  *FontStrikeThrough 值为[on|{off}]  *FontUnderline 值为[on|{off}]  FontWeight light: {normal}: demi: bold: 坐标轴文本加黑 淡字体 正常字体 适中或者黑体 黑体  GridLineStyle -: --: {:}: -.: 格栅线形 实线 虚线 点线 点划线  *Layer 值为[top|{bottom}]  LineStyleOrder 指定线形次序的字符串,用在坐标轴上画多条线。例如:’ .- | : | -- | - ‘ 将通过点划线、点线、虚线和实线循环。LineStyleOrder缺省值为 ‘-’ ,即只有实线  LineWidth X ,Y和Z坐标轴的宽度。缺省值为0.5点  *MinorGridLineStyle 值为[ - | - - | {:} | -. ]  NextPlot new: add: {replace}: 画新图时要采取的动作 在画前建立新的坐标轴 把新的对象加到当前坐标轴,参阅hold 在画前,删除当前坐标轴和它的子对象,并用新的坐标轴对象来代替它  Position 位置向量[left,bottom,width,height],这里[left,bottom]代表了相对于图形对象左下角的坐标轴左下角位置,[width,height]是坐标轴的尺寸,单位由Units属性指定  TickLength 向量[2Dlength 3Dlength],代表了在二维和三维视图中坐标轴刻度标记的长度。该长度是相对于坐标轴的长度。缺省值为[0.01 0.01],代表二维视图坐标轴长度的1/100,三维视图坐标轴长度的5/1000  TickDir in: out: 值为[{in}|out] 刻度标记从坐标轴线向内,二维视图为缺省值 刻度标记从坐标轴线向外,三维视图为缺省值  Title 坐标轴标题文本对象的句柄  Units inches: centimeters: {normalized}: points: pixels: 位置属性值的度量单位 英寸 厘米 归一化坐标,对象左下角映射到[0 0],右上角映射到[1 1] 排字机的点,等于1/72英寸 屏幕象素,计算机屏幕分辨率的最小单位  View 向量[az el],它代表了观察者的视角,以度为单位。az为方位角或视角相对于负Y轴向右的转角;el为X-Y平面向上的仰角。详细细节见三维图形这一章  XColor RGB向量或预定的颜色字符串,它指定X轴线、标志、刻度标记和格栅线的颜色。缺省为white(白色)  XDir {normal}: reverse: X值增加的方向 X值从左向右增加 X值从右向左增加  XForm 一个4×4的视图转换矩阵。设置view属性影响XForm  XGrid on: {off}: X轴上的格栅线 X轴上每个刻度标记处画格栅线 不画格栅线  XLabel X轴标志文本对象的句柄  XLim 向量[xmin xmax],指定X轴最小和最大值  XLimMode {auto}: manual: X轴的界限模式 自动计算XLim,包括所有轴子对象的XData 从XLim取X轴界限  *XMinorGrid 值为[on|{off}]  *XMinorTicks 值为[on|{off}]  Xscale {linear}: log: X轴换算 线形换算 对数换算  XTick 数据值向量,按此数据值将刻度标记画在X轴上,将XTick设为空矩阵就撤消刻度标记  XTickLabels 文本字符串矩阵,用在X轴上标出刻度标记。如果是空矩阵,那么MATLAB在刻度标记上标出该数字值  XTickLabelMode {auto}: manual: X轴刻度标记的标志模式 X轴刻度标记张成XData 从XTickLabels中取X轴刻度标记  XTickMode {auto}: manual: X轴刻度标记的间隔模式 X轴刻度标记间隔以张成XData 从XTick生成X轴刻度标记  YColor RGB向量或预定的颜色字符串,它指定Y轴线、标志、刻度标记和格栅线的颜色。缺省为white(白色)  YDir {normal}: reverse: Y值增加的方向 Y值从左向右增加 Y值从右向左增加  YGrid on: {off}: Y轴上的格栅线 Y轴上每个刻度标记处画格栅线 不画格栅线  YLabel Y轴标志文本对象的句柄  YLim 向量[Ymin Ymax],指定Y轴最小和最大值  YLimMode {auto}: manual: Y轴的界限模式 自动计算YLim,包括所有轴子对象的YData 从YLim取Y轴界限  *YMinorGrid 值为[on|{off}]  *YMinorTicks 值为[on|{off}]  Yscale {linear}: log: Y轴换算 线形换算 对数换算  YTick 数据值向量,按此数据值将刻度标记画在Y轴上。将YTick设为空矩阵就消去刻度标记  YTickLabels 文本字符串矩阵,用在Y轴上标出刻度标记,如果是空矩阵,那么MATLAB在刻度标记上标出该数字值  YTickLabelMode {auto}: manual: Y轴刻度标记的标志模式 Y轴刻度标记张成YData 从YTickLabels中取Y轴刻度标记  YTickMode {auto}: manual: Y轴刻度标记的间隔模式 Y轴刻度标记间隔以张成YData 从YTick生成Y轴刻度标记  ZColor RGB向量或预定的颜色字符串,它指定Z轴线、标志、刻度标记和格栅线的颜色。缺省为white(白色)  ZDir {normal}: reverse: Z值增加的方向 Z值从左向右增加 Z值从右向左增加  ZGrid on: {off}: Z轴上的格栅线 Z轴上每个刻度标记处画格栅线 不画格栅线  ZLabel Z轴标志文本对象的句柄  ZLim 向量[Zmin Zmax],指定Z轴最小和最大值  ZLimMode {auto}: manual: Z轴的界限模式 自动计算ZLim,包括所有轴子对象的ZData 从ZLim取Z轴界限  *ZMinorGrid 值为[on|{off}]  *ZMinorTicks 值为[on|{off}]  Zscale {linear}: log: Z轴换算 线形换算 对数换算  ZTick 数据值向量,按此数据值将刻度标记画在Z轴上,将ZTick设为空矩阵就撤消刻度标记  ZTickLabels 文本字符串矩阵,用在Z轴上标出刻度标记,如果是空矩阵,那么MATLAB在刻度标记上标出该数字值  ZTickLabelMode {auto}: manual: Z轴刻度标记的标志模式 Z轴刻度标记张成ZData 从ZTickLabels中取Z轴刻度标记  ZTickMode {auto}: manual: Z轴刻度标记的间隔模式 Z轴刻度标记间隔以张成ZData 从ZTick生成Z轴刻度标记  ButtonDownFcn MATLAB回调字符串,当坐标轴被选中时,将它传递给函数eval;初始值是一个空矩阵  Children 除了轴标志和标题对象以外,所有子对象句柄的只读向量;包括线、曲面、图象、补片和文本对象  Clipping {on}: off: 数据限幅模式 对坐标轴对象不起作用 对坐标轴对象不起作用  Interruptible {no}: yes: 指定ButtonDownFcn回调字符串是否可中断 该回调字符串不能被其它回调所中断 该回调字符串可以被其它回调所中断  Parent 包含坐标轴对象的图形句柄  *Selected 值为[on|{off}]  *Tag 文本串  Type 只读的对象辨识字符串,常为axes  UserData 用户指定的数据,可以是矩阵、字符串等等  Visible {on}: off: 轴线、刻度标记和标志的可视性 坐标轴在屏幕上可视 坐标轴不可视   表20.6 线条对象属性  Color 线条颜色。一个三个元素RGB向量或MATLAB预定的颜色名之一。缺省值是white(白色)  EraseMode {normal}: backgrount: none: 消除和重画模式 重画影响显示的作用区域,以保证所有的对象正确地画出。这是最精确的,也是最慢的一种模式 通过在图形背景色中重画线来消除线条。这会破坏被消除的线后的对象 xor:用线下屏幕的颜色执行异或OR(XOR)运算,画出和消除线条。当画在其它对象上时,可造成不正确的颜色 当移动或删除线条时该线不会被消除  LineStyle {-}: --: :: -.: +: o: *: .: X: 线形控制 画通过所有数据点的实线 画通过所有数据点的虚线 画通过所有数据点的点线 画通过所有数据点的点划线 用加号作记号,标出所有的数据点 用圆圈作记号,标出所有的数据点 用星号作记号,标出所有的数据点 用实点作记号,标出所有的数据点 用X符号作记号,标出所有的数据点  LineWidth 以点为单位的线宽。缺省值是0.5  MarkerSize 以点为单位的记号大小,缺省值是6点  Xdate 线的X轴坐标的向量  Ydate 线的Y轴坐标的向量  Zdate 线的Z轴坐标的向量  ButtonDownFcn 当线条对象被选中时,MATLAB回调字符串传递给函数eval;初始值是一个空矩阵  Children 空矩阵,线条对象没有子对象  Clipping {on}: off: 数据限幅模式 在坐标轴界限外的线的任何部分不显示 线条数据不限幅  Interruptible {no}: yes: 指定ButtonDownFcn回调字符串是否可中断 不能被其它回调中断 可以被其它回调中断  Parent 包含线条对象的坐标轴句柄  *Selected 值为[on|{off}]  *Tag 文本串  Type 只读的对象辨识字符串,常为line  UserData 用户指定的数据,可以是矩阵、字符串等等  Visible {on}: off: 线的可视性 线在屏幕上可视 线在屏幕上不可视   表20.7 文本对象属性  Color 线条颜色。一个三个元素RGB向量或MATLAB预定的颜色名之一。缺省值是white(白色)  EraseMode {normal}: backgrount: xor: none: 消除和重画模式 重画影响显示的作用区域,以保证所有的对象正确地画出。这是最精确的,也是最慢的一种模式 通过在图形背景色中重画文本来消除文本。这会破坏被消除的文本后的对象 用文本下屏幕颜色执行异或OR(XOR)运算,画出和消除该文本。当画在其它对象上时,会造成不正确的颜色 当移动或删除文本时该文本不会被消除  Extent 文本位置向量[left,bottom,width,height],[left,bottom]代表了相对于坐标轴对象左下角的文本对象左下角的位置,[width,height]是包围文本串的矩形区域的大小,单位由Units属性指定  FontAngle {normal}: italics: oblique: 文本为斜体 正常的字体角度 斜体 某些系统中为斜体  FontName 文本对象的字体名。缺省的字体名为Helvetica  FontSize 文本对象的大小,以点为单位,缺省值为12点  *FontStrikeThrough 值为[on|{off}]  *FontUnderline 值为[on|{off}]  FontWeight light: {normal}: demi: bold: 文本对象加黑 淡字体 正常字体 适中或者黑体 黑体  HorizontalAlignment {left}: center: right: 文本水平对齐 文本相对于它的Position左对齐 文本相对于它的Position中央对齐 文本相对于它的Position右对齐  Position 两元素或三元素向量[X Y (Z)],指出文本对象在三维空间中的位置。单位由Units属性指定  Rotation {0}: ±90: ±180: ±270: 以旋转度数表示的文本方向, 水平方向 文本旋转±90度 文本旋转±180度 文本旋转±270度  String 要显示的文本串  Units inches: centermeters: normalized: points: pixels: {data}: 位置属性值的度量单位 英寸 厘米 归一化坐标,对象左下角映射到[0 0],右上角映射到[1 1] 排字机的点,等于1/72英寸 屏幕象素,计算机屏幕分辨率的最小单位 父坐标轴的数据单位  VerticalAlignment top: cap: {middle}: baseline: bottom: 文本垂直对齐 文本串放在指定的Y位置顶部 字体的大写字母的高度在指定的Y位置 文本串放在指定的Y位置中央 字体的基线在指定的Y位置 文本串放在指定的Y位置底部  ButtonDownFcn 当文本对象被选中时,MATLAB回调字符串传递给函数eval;初始值是一个空矩阵  Children 空矩阵,文本对象没有子对象  Clipping {on}: off: 数据限幅模式 在坐标轴界限外的文本的任何部分不显示 文本数据不限幅  Interruptible {no}: yes: 指定ButtonDownFcn回调字符串是否可中断 不能被其它回调中断 可以被其它回调中断  Parent 包含文本对象的坐标轴句柄  *Selected 值为[on|{off}]  *Tag 文本串  Type 只读的对象辨识字符串,常为text  UserData 用户指定的数据,可以是矩阵、字符串等等  Visible {on}: off: 文本的可视性 文本在屏幕上可视 文本在屏幕上不可视   表20.8 曲面对象属性  CData 指定ZData中每一点颜色的数值矩阵。如果CData的大小与ZData不同,CData中包含的图象被映射到ZData所定义的曲面  EdgeColor none: {flat}: interp: A ColorSpec: 曲面边缘颜色控制 不画边缘线 边缘线为单一颜色,由该面CData的第一个入口项决定。缺省值是black(黑色) 各边缘的颜色由顶点的值通过线性插值得到 3元素RGB向量或MATLAB预定的颜色名之一,指定边缘的单一颜色。缺省值是black(黑色)  EraseMode {normal}: backgrount: xor: none: 消除和重画模式 重画影响显示的作用区域,以保证所有的对象正确地画出。这是最精确的,也是最慢的一种模式 通过在图形背景色中重画曲面来消除曲面。这会破坏被消除的曲面后的对象 用曲面下屏幕颜色执行异或OR(XOR)运算,画出和消除曲面。当画在其它对象上时会造成不正确的颜色 当移动或删除曲面时该曲面不会被消除  FaceColor none: {flat}: interp: A ColorSpec: 曲面表面颜色控制 不画表面,但画出边缘 第一个CData入口项决定曲面颜色 各面颜色由曲面网格点通过线性插值得到 3元素RGB向量或MATLAB预定的颜色名之一,指定表面为单一颜色  LineStyle {-}: --: :: -.: +: o: *: .: X: 边缘线形控制 画通过所有网格点的实线 画通过所有网格点的虚线 画通过所有网格点的点线 画通过所有网格点的点划线 用加号作记号,标出所有的网格点 用圆圈作记号,标出所有的网格点 用星号作记号,标出所有的网格点 用实点作记号,标出所有的网格点 用X符号作记号,标出所有的网格点  LineWidth 边缘线的宽度,缺省值是0.5点  MarkerSize 边缘线的记号大小,缺省值是6点  MeshStyle {both}: row: column: 画行和/或列线 画所有的边缘线 只画行边缘线 只画列边缘线  *PaletteMode 值为[{scaled}|direct|bypass]  XData 曲面中点的X坐标  YData 曲面中点的Y坐标  ZData 曲面中点的Z坐标  ButtonDownFcn 当曲面对象被选中时,MATLAB回调字符串传递给函数eval;初始值是一个空矩阵  Children 空矩阵,曲面对象没有子对象  Clipping {on}: off: 数据限幅模式 在坐标轴界限外的曲面的任何部分不显示 曲面数据不限幅  Interruptible {no}: yes: 指定ButtonDownFcn回调字符串是否可中断 不能被其它回调中断 可以被其它回调中断  Parent 包含曲面对象的坐标轴句柄  *Selected 值为[on|{off}]  *Tag 文本串  Type 只读的对象辨识字符串,常为surface  UserData 用户指定的数据,可以是矩阵、字符串等等  Viible {on}: off: 曲面的可视性 曲面在屏幕上可视 曲面在屏幕上不可视   表20.9 补片对象属性  CData 指定沿补片边缘每一点颜色的数值矩阵。只有EdgeColor或FaceColor被设为interp或flat时才使用  EdgeColor none: {flat}: interp: A ColorSpec: 补片边缘颜色控制 不画边缘线 边缘线为单一颜色,由补片颜色数据的均值指定。缺省值是black(黑色) 边缘颜色由补片顶点的值通过线性插值得到 三元素RGB向量或MATLAB预定的颜色名之一,指定边缘为单一颜色。缺省值是black(黑色)  EraseMode {normal}: backgrount: xor: none: 消除和重画模式 重画影响显示的作用区域,以保证所有的对象正确地画出。这是最精确的,也是最慢的一种模式 通过在图形背景色中重画补片来消除该补片。这会破坏被消除的补片后的对象 用补片下屏幕颜色执行异或OR(XOR)运算,画出和消除补片。当画在其它对象上时会造成不正确的颜色 当移动或删除补片时该补片不会被消除  FaceColor none: {flat}: interp: A ColorSpec: 补片表面颜色控制 不画表面,但画出边缘 颜色参量c中的值决定各补片的表面颜色 各表面颜色由CData属性指定的值通过线性插值决定 三元素RGB向量或MATLAB预定的颜色名之一,指定表面为单一颜色  LineWidth 轮廓线的宽度,以点为单位。缺省值为0.5点  *PaletteModel 值为[{scaled}|direct|bypass]  XData 沿补片边缘点的X坐标  YData 沿补片边缘点的Y坐标  ZData 沿补片边缘点的Z坐标  ButtonDownFcn 当补片对象被选中时,MATLAB回调字符串传递给函数eval;初始值是一个空矩阵  Children 空矩阵,补片对象没有子对象  Clipping {on}: off: 数据限幅模式 在坐标轴界限外的补片的任何部分不显示 补片数据不限幅  Interruptible {no}: yes: 指定ButtonDownFcn回调字符串是否可中断 不能被其它回调中断 可以被其它回调中断  Parent 包含补片对象的坐标轴句柄  *Selected 值为[on|{off}]  *Tag 文本串  Type 只读的对象辨识字符串,常为patch  UserData 用户指定的数据,可以是矩阵、字符串等等  Visible {on}: off: 补片的可视性 补片在屏幕上可视 补片在屏幕上不可视   表20.10 图象对象属性  CData 指定图象中各元素颜色的值矩阵。image(c)将c赋给CData。CData中的元素是当前颜色映象的下标  XData 图象X数据;指定图象中行的位置。如忽略,使用CData中的行下标  YData 图象X数据;指定图象中列的位置。如忽略,使用CData中的列下标  ButtonDownFcn 当图象对象被选中时,MATLAB回调字符串传递给函数eval;初始值是一个空矩阵  Children 空矩阵,图象对象没有子对象  Clipping {on}: off: 数据限幅模式 在坐标轴界限外的图象的任何部分不显示 图象数据不限幅  Interruptible {no}: yes: 指定ButtonDownFcn回调字符串是否可中断 不能被其它回调中断 可以被其它回调中断  Parent 包含图象对象的坐标轴句柄  *Selected 值为[on|{off}]  *Tag 文本串  Type 只读的对象辨识字符串,常为image  UserData 用户指定的数据,可以是矩阵、字符串等等  Visible {on}: off: 图象的可视性 图象在屏幕上可视 图象在屏幕上不可视   20.13 小结 句柄图形函数让用户对图形进行细调,并且显示所建立的图形。每一个图形对象都有一个和它相关的句柄,并可用句柄来操作该对象。对象属性可以用函数get和set来修改,以便来定制用户的图形。 本章讨论的函数总结在表20.11和表20.12中: 表20.11 句柄图形函数  set(handle, ‘PropertyName’ ,Value) 设置对象属性  get(handle, ‘PropertyName’ ) 获取对象属性  reset(handle) 将对象属性重设为缺省值  delete(handle) 删除一个对象和它所有的子对象  gcf 获取当前图形的句柄  gca 获取当前坐标轴的句柄  gco 获取当前对象的句柄  findobj( ‘PropertyName’ ,Value) 获取具有指定的属性值的对象的句柄  waitforbuttonpress 等待键或鼠标按钮在图形中按下  figure( ‘PropertyName’ ,Value) 创建图形对象  axes( ‘PropertyName’ ,Value) 创建坐标轴对象  line(X,Y, ‘PropertyName’ ,Value) 创建线条对象  text(X,Y,S, ‘PropertyName’ ,Value) 创建文本对象  patch(X,Y,C, ‘PropertyName’ ,Value) 创建补片对象  surface(X,Y,Z, ‘ PropertyName’ ,Value) 创建曲面对象  image(C, ‘PropertyName’ ,Value) 创建图象对象   表20.12中是本章所提到的精通MATLAB工具箱中的函数: 表20.12 精通MATLAB工具箱句柄图形函数  mmgcf 如当前的图形存在,获取它的句柄  mmgca 如当前的坐标轴存在,获取它的句柄  mmzap(T) 用鼠标删除类型T的图形对象  mmpx2n(X) 象素到归一化坐标的转换  mm2px(X) 归一化坐标到象素的转换  mmline Name Value… 用鼠标设置线属性  mmaxes Name Value… 用鼠标设置坐标轴属性  mmcont2(X,Y,Z,N,C) 用用户自定义颜色作二维等值线图  mmcont3(X,Y,Z,N,C) 用用户自定义颜色作三维等值线图  mmtile 以平铺形式安排图形窗口  mmpager Name Value… 设置打印的缺省纸张属性   关键词索引 chap20 graphics routine 图形例程 handle 句柄 object 对象 property 属性 stacking order 堆积次序 pixel 象素 Normalized coordinates 归一化坐标 landscape 景象(横向) portrait 肖像(纵向) full page 全幅 documented property 文件式属性 undocumented property 非文件式属性 root 根(对象) figure 图形窗口(对象) axis 坐标轴(对象) line 线条(对象) surface 曲面(对象) text 文本(对象) patch 补片(对象) image 图象(对象) clipping 限幅