MATLAB中 gcf、gca以及 gco的区别
gcf返回当前 Figure对象的句柄值
gca返回当前 axes对象的句柄值
gco返回当前鼠标单击的句柄值,该对象可以是除 root对象外的任意图形对象,并且 Matlab会把当前图形对象的句柄值存放在 Figure的 CurrentObject属性中。
可以用一下语句查看所有的特性
get(gca) %取的axes的相关属性的设定
get(gcf) %取的视窗的相关属性的设定
get(gco) %这个必须配合滑鼠触发的方式~来获的物件相关的属性
图形对象
图形对象是用以显示图形和用户界面元素的基本元素。下表列出了各种图形对象。
对象
|
描述
|
Root
|
对计算机屏幕最高级的对象
|
Figure
|
用来显示图形和用户界面的窗口
|
Axes
|
在窗口中显示图形的轴
|
Uicontrol
|
用户界面控制。执行一个对用户交互作用的函数。
|
Uimenu
|
用户定义窗口菜单
|
Uicontextmenu
|
右键单击对象时弹出的菜单
|
Image
|
二维像素基础图
|
Light
|
影响斑点和表面对象着色的光源
|
Line
|
用于如 plot, plot3, semilogx等函数的线
|
Patch
|
带边缘的填充多边形
|
Rectangle
|
二维形状,从矩形到椭圆
|
Surface
|
由 x-y平面以上的数据值所作图创建的矩阵数据的三维表示
|
Text
|
字符串
|
对象级别
不同对象分布在一个树形结构级别里,反映它们的独立性。例如,线对象是在轴对象的框架下的。依次,轴对象只存在于 figure对象中。
要想对gcf、gca以及 gco之间的区别进一步的了解,MATLAB中的句柄图形的了解是必要的,以下部分是 MATLAB句柄图形中关于gcf、gca以及 gco的部分,供大家参考。
句柄图形
什么是句柄图形?句柄图形是对底层图形例程集合的总称,它实际上进行生成图形的工作。这些细节通常隐藏在图形 M文件的内部,但如果想使用它们也是可得到的。
MATLAB用户指南给人的一种印象是,句柄图形非常复杂,只对熟练的高级用户才有用。而实际上不是这样的。句柄图形可以被任何人用来改变 MATLAB生成图形的方式,不论是只想在一幅图里做一点小变动,还是想做影响所有图形输出的全局变动。
句柄图形允许你定制图形的许多特性,而这用高级命令和前几章里描述的函数是无法实现的。例如,如果想用橘黄色来画一条线,而不是 plot命令中可用的任何一种颜色,该怎么做呢?句柄图形就可以提供一种方法。
本章不对句柄图形作详细讨论,因为那样涉及问题太细。这里的目的只是对句柄图形概念作基本了解,并提供足够多的信息,使得即使是偶尔使用一下MATLAB的用户也可以利用句柄图形。在这个背景下,在本章最后给出了关于句柄图形对象属性和它们的值,它不仅很有用也很有意义。
20.1 谁需要句柄图形?
开始,我们要强调本章主要是针对那些不满足于 MATLAB普通图形特性的读者。如果对所画的图形已经很满意,那么就跳过当前的讨论。如果以后要定制图形,只要记住这里有可用的信息。
现在,对于那些还在犹豫的用户,我们要强调学习使用句柄图形并不困难。如果只想改变图形的标题字体,或者改变一个图形窗口的背景颜色,那么,你不必成为一个句柄图形的专家也可做到。
另一方面,如果想定制图形,并且要打算对图形的每个可能方面进行控制,那么句柄图形会为此提供强有力的工具。
前面那些章提供的图形功能被认为是高级的命令和函数,包括plot,mesh,axis及其它。这些函数是建立在底层函数和属性的基础上,总称为句柄图形。
20.2 什么是句柄图形对象
句柄图形是基于这样的概念,即一幅图的每一组成部分是一个对象,每一个对象有一系列句柄和它相关,每一个对象有按需要可以改变的属性。
当今计算机行业最流行的术语之一便是对象这个词。面向对象的编程语言,
数据库对象,操作系统和应用程序接口都使用了对象的概念。一个对象可以被粗略地定义为由一组紧密相关、形成唯一整体的数据结构或函数集合。在MATLAB中,图形对象是一幅图中很独特的成分,它可以被单独地操作。
由图形命令产生的每一件东西都是图形对象。它们包括图形窗口或仅仅说是图形,还有坐标轴、线条、曲面、文本和其它。这些对象按父对象和子对象组成层次结构。计算机屏幕是根对象,并且是所有其它对象的父亲。图形窗口是根对象的子对象;坐标轴和用户界面对象(在下一章讨论)是图形窗口的子对象;线条、文本、曲面、补片和图象对象是坐标轴对象的子对象。
根可包含一个或多个图形窗口,每一个图形窗口可包含一组或多组坐标轴。所有其它的对象(除了在下一章讨论的 uicontrol和 uimenu外)都是坐标轴的子对象,并且在这些坐标轴上显示。所有创建对象的函数当父对象或对象不存在时,都会创建它们。例如,如果没有图形窗口,plot(rand(size([1:10])))函数会用缺省属性创建一个新的图形窗口和一组坐标轴,然后在这组坐标轴内画线。
20.3 句柄对象
假设已打开了三个图形窗口,其中两个有两幅子图。并要改变其中一幅子图坐标轴内一条线的颜色,如何认定想要改变的那条线?在 MATLAB中,每一个对象都有一个数字来标识,叫做句柄。
每次创建一个对象时,就为它建立一个唯一的句柄。计算机屏幕作为根对象常常是0。? Hf_fig=figure命令建立一个新的图形窗口,变量 Hf_fig中返回它的句柄值。图形窗口的句柄为整数,通常显示在图形窗口标题条中。其它对象句柄是 MATLAB满精度的浮点值。
MATLAB可以用来获得图形、坐标轴和其它对象的句柄。例如,? Hf_fig=gcf返回当前图形窗口的句柄值,而? Ha_ax=gca返回当前图形窗口内当前坐标轴的句柄值。这些函数和其它对象操作的工具在本章以后讨论。
为了提高可读性,在本书中包含句柄对象的变量取名以大写的 H开头,跟之以一个辨识对象类型的字母,然后是一个下划线,最后是一个或几个描述符。因此,Hf_fig是一个图形窗口的句柄,Ha_ax1是坐标轴对象的句柄,而 Ht_title是一个文本对象的句柄。当对象类型不知道时,用字母x,比如Hx_obj。虽然句柄变量可以取任意名字,遵循这种规则使得能在 M文件中很容易找到句柄变量。
所有产生对象的 MATLAB函数都为所建立的每个对象返回一个句柄(或句柄的列向量)。这些函数包括plot,mesh,surf及其它。有一些图形由一个以上对象组成。比如,一个网格图由一个曲面组成,它只有一个句柄;而 waterfall
图形由许多线条对象组成,每个线条对象都有各自的句柄。
例如,? Hl_wfall=waterfall(peaks(20)) 对线条返回一个包含着 2得了一个对象的句柄,它的对象类型可以通过查询对象的 'Type' 属性来获得。该属性是一个字符串对象名,比如 'figure' ,'axes' 或 'text' 。例如:
? x_type=get(Hx_obj, 'Type' )
MATLAB中的函数gcf,gca和 gco是很好的例子,它们说明如何利用句柄图形来获得有关对象的信息。
函数 gcf获得根对象的 'CurrentFigure' 的属性值,即是当前图形的句柄。gcf M文件包含:
function h=gcf()
% GCF Get current figure handle.
% H=GCF returns the handle to the current figure.The current fugure is the figure(graphics window
that graphics commands like PLOT,TITLE,SURF,etc.draw to if issued.
% % Use the commands FIGURE to change the current figure to a dif fent figure,or to create new
% ones. %
% See also FIGURE,CLOSE,CLF,GCA.
% Copyright (c) 1984-94 by The MathWorks,Inc.
h=get(0, 'CurrentFigure' );
类似的,函数 gca返回当前图形的 'CurrentAxes' 属性值,它的 M文件描述如下。
function h=gca()
% GCA Get current axis handle.
% H=GCA returns the handle to the current axis.The current axis is the axis that graphics
% command like PLOT,TITLE,SURF,etc.draw to i f issued.
% % Use the commands AXES or SUBPLOT to change the current axis to a different axis,or to
% create new ones.
% see also AXES,SUBPLOT,DELETE,CLA,HOLD,GCF. % Copyright (c) 1984-94 by The MathWorks,Inc.
h=get(get(0, 'CurrentFigure' ), 'CurrentAxes' );
函数 gco也相同,只是它在试图获得当前对象之前先检查图形是否存在。注意函数 gcf和 gca能促使建立相关的对象,如果它们不存在的话。如下所示的函数gco,它先检查子对象( 'Children' )是否存在,如果不存在,就不创建图形对象。
function object=gco(figure)
%GCO Handle of current object.
% OBJECT=GCO returns the current object in the current figure.
% % OBJECT=GCO(FIGURE) returns the current object in figure FIGURE.
% % The current object for a given figure is the last object clicked on
with mouse.
%Copyright (c) 1984-94 by The MathWorks,Inc.
if isempty(get(0, 'Children' )) object=[ ]; return; end;
if (nargin==0) figure=get(0, 'CurrentFigure' ); end
object=get(figure, 'CurrentObject' );
当需要一些除了 'CurrentFigure' 、 'CurrentAxes' 和 'CurrentObject' 之外的某些东西时,可以用函数 get来获得一个对象的子对象的句柄向量。例如:
? Hx_kids=get(gcf, 'Children' )返回一个向量,它包含当前图形子对象的句柄。 可以用获得子对象 'Children' 句柄的技术彻底搜索句柄图形的层次结构中来找到所要的对象。例如,在画出一些数据后,寻找绿色线条句柄的问题。
x=-pi:pi/20:pi;
% create some data
y=sin(x); z=cos(x);
plot(x,y, 'r' ,x,z, 'g' );
% plot two lines in red and green
Hl_lines=get(gca, 'Children' );
% get the line handles
for k=1:size(Hl_lines)
% find the green line
if get(Hl_lines(k), 'Color' )==[0 1 0]
Hl_green=Hl_lines(k)
end
end Hl_green= 58.0001
get(gca)
ActivePositionProperty
= position
ALim = [0 1]
ALimMode = auto
AmbientLightColor = [1 1 1]
Box = on
CameraPosition = [1000 10000 17.3205]
CameraPositionMode = auto
CameraTarget = [1000 10000 0]
CameraTargetMode = auto
CameraUpVector = [0 1 0]
CameraUpVectorMode = auto
CameraViewAngle = [6.60861]
CameraViewAngleMode = auto
CLim = [0 1]
CLimMode = auto
Color = [1 1 1]
CurrentPoint = [ (2 by 3) double array]
ColorOrder = [ (7 by 3) double array]
DataAspectRatio = [1000 10000 1]
DataAspectRatioMode = auto
DrawMode = normal
FontAngle = normal
FontName = Helvetica
FontSize = [10]
FontUnits = points
FontWeight = normal
GridLineStyle = :
Layer = bottom
LineStyleOrder = -
LineWidth = [0.5]
MinorGridLineStyle = :
NextPlot = replace
OuterPosition = [0.0970444 0.092582 0.374206
0.253895]
PlotBoxAspectRatio = [1 1 1]
PlotBoxAspectRatioMode = auto
Projection = orthographic
Position = [0.13 0.11 0.334659 0.211887]
TickLength = [0.01 0.025]
TickDir = in
TickDirMode = auto
TightInset = [0.01875 0.017418 0.00104167
0.0245902]
Title = [187.011]
Units = normalized
View = [0 90]
XColor = [0 0 0]
XDir = normal
XGrid = off
XLabel = [188.011]
XAxisLocation = bottom
XLim = [0 2000]
XLimMode = auto
XMinorGrid = off
XMinorTick = off
XScale = linear
XTick = [20 10010 20000]
XTickLabel = 20
XTickLabelMode = auto
XTickMode = manual
YColor = [0 0 0]
YDir = normal
YGrid = off
YLabel = [189.011]
YAxisLocation = left
YLim = [0 20000]
YLimMode = auto
YMinorGrid = off
YMinorTick = off
YScale = linear
YTick = [20 10010 20000]
YTickLabel =
0.002
1.001
2
YTickLabelMode = auto
YTickMode = manual
ZColor = [0 0 0]
ZDir = normal
ZGrid = off
ZLabel = [190.011]
ZLim = [-1 1]
ZLimMode = auto
ZMinorGrid = off
ZMinorTick = off
ZScale = linear
ZTick = [-1 0 1]
ZTickLabel =
ZTickLabelMode = auto
ZTickMode = auto
BeingDeleted = off
ButtonDownFcn =
Children = [186.012]
Clipping = on
CreateFcn =
DeleteFcn =
BusyAction = queue
HandleVisibility = on
HitTest = on
Interruptible = on
Parent = [1]
Selected = off
SelectionHighlight = on
Tag =
Type = axes
UIContextMenu = []
UserData = []
Visible = on
get(gcf)
Alphamap = [ (1 by
64) double array]
CloseRequestFcn = closereq
Color = [0.8 0.8 0.8]
Colormap = [ (64 by 3) double array]
CurrentAxes = [185.011]
CurrentCharacter =
CurrentObject = []
CurrentPoint = [0 0]
DockControls = on
FileName =
IntegerHandle = on
InvertHardcopy = on
KeyPressFcn =
KeyReleaseFcn =
MenuBar = figure
Name =
NextPlot = add
NumberTitle = on
PaperUnits = centimeters
PaperOrientation = portrait
PaperPosition = [0.634517 6.34517 20.3046
15.2284]
PaperPositionMode = manual
PaperSize = [20.984 29.6774]
PaperType = A4
Pointer = arrow
PointerShapeCData = [ (16 by 16) double
array]
PointerShapeHotSpot = [1 1]
Position = [1 31 1920 976]
Renderer = painters
RendererMode = auto
Resize = on
ResizeFcn =
SelectionType = normal
ToolBar = auto
Units = pixels
WindowButtonDownFcn =
WindowButtonMotionFcn =
WindowButtonUpFcn =
WindowKeyPressFcn =
WindowKeyReleaseFcn =
WindowScrollWheelFcn =
WindowStyle = normal
WVisual = 00 (RGB 32 GDI,
Bitmap, Window)
WVisualMode = auto
BeingDeleted = off
ButtonDownFcn =
Children = [ (5 by 1) double array]
Clipping = on
CreateFcn =
DeleteFcn =
BusyAction = queue
HandleVisibility = on
HitTest = on
Interruptible = on
Parent = [0]
Selected = off
SelectionHighlight = on
Tag =
Type = figure
UIContextMenu = []
UserData = []
Visible = on
另外附上findobj
b=findobj
b =
0 %电脑营幕握把值~一定是0
1.0000 %视窗握把值
170.0024 %
axes握把值
172.0024
%线条一握把值
171.0029
%线条二握把值
findobj这是寻找物件的握把值得函数
也可以这样用
>> findobj('type','line') %显示物件类型为line的握把值
ans =
172.0024
171.0029
只要能获的握把值就可以利用inspect(h)
调出相关的属性设定的视窗
注意:
如果获的握把值以后如上
不可以输入inspect(172.0024)
这样是错误的方式
因为握把值不是只有小数四位
只要输入format long
就可以发现握把值变成
>> format long
>> findobj('type','line')
ans =
1.0e+002 *
1.720024414062500
1.710029296875000
因此输入的方式必须是变量~
例如
>>aaa = findobj('type','line')
>>inspect(aaa(1))
这样才对~有和任何说错或是不完全的地方~再一起讨论~
加载中,请稍候......