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 限幅