MATLAB 中gcf、gca 以及gco 的区别

MATLAB 中gcf、gca 以及gco 的区别1 三者的功能定义 gcf 返回当前 Figure 对象的句柄值 gca 返回当前 axes 对象的句柄值 gco 返回当前鼠标单击的句柄值 该对象可以是除 root 对象外的任意图形对象 并且 Matlab 会把当前图形对象的句柄值存放在 F

大家好,欢迎来到IT知识分享网。

1.三者的功能定义:

 

gcf 返回当前Figure 对象的句柄值 gca 返回当前axes 对象的句柄值 gco 返回当前鼠标单击的句柄值,该对象可以是除root 对象外的任意图形对象,并且Matlab 会把当前图形对象的句柄值存放在Figure 的CurrentObject属性中。 

 

2.matlab下的图形对象

对象  描述
Root 对计算机屏幕最高级的对象
Figure  用来显示图形和用户界面的窗口
Axes 在窗口中显示图形的轴
Uicontrol  用户界面控制。执行一个对用户交互作用的函数。
Uimenu  用户定义窗口菜单
Uicontextmenu  右键单击对象时弹出的菜单
Image  二维像素基础图
Light  影响斑点和表面对象着色的光源
Line  用于诸如plot, plot3, semilogx 等函数的线
Patch  带边缘的填充多边形
Rectangle  二维形状,从矩形到椭圆
Surface  由x-y 平面以上的数据值所作图创建的矩阵数据的三维表示
Text  字符串

 

3. 图形对象级别

句柄图形

  MATLAB 用户指南给人的一种印象是,句柄图形非常复杂,只对熟练的高级用户才有用。而实际上不是这样的。句柄图形可以被任何人用来改变MATLAB生成图形的方式,不论是只想在一幅图里做一点小变动,还是想做影响所有图形输出的全局变动。

  在这个背景下,在本章最后给出了关于句柄图形对象属性和它们的值,它不仅很有用也很有意义。

4. 谁需要句柄图形?

  开始,我们要强调本章主要是针对那些不满足于MATLAB 普通图形特性的读者。如果对所画的图形已经很满意,那么就跳过当前的讨论。如果以后要定制
图形,只要记住这里有可用的信息。

  现在,对于那些还在犹豫的用户,我们要强调学习使用句柄图形并不困难。如果只想改变图形的标题字体,或者改变一个图形窗口的背景颜色,那么,你不必成为一个句柄图形的专家也可做到。另一方面,如果想定制图形,并且要打算对图形的每个可能方面进行控制,那么句柄图形会为此提供强有力的工具。前面那些章提供的图形功能被认为是高级的命令和函数,包括plot,mesh,axis 及其它。这些函数是建立在底层函数和属性的基础上,总称为句柄图形

什么是句柄图形对象

  根可包含一个或多个图形窗口,每一个图形窗口可包含一组或多组坐标轴。所有其它的对象(除了在下一章讨论的uicontrol 和uimenu 外)都是坐标轴的子对象,并且在这些坐标轴上显示。所有创建对象的函数当父对象或对象不存在时,都会创建它们。例如,如果没有图形窗口,plot(rand(size([1:10])))函数会用缺省属性创建一个新的图形窗口和一组坐标轴,然后在这组坐标轴内画线。

句柄对象

  假设已打开了三个图形窗口,其中两个有两幅子图。并要改变其中一幅子图坐标轴内一条线的颜色,如何认定想要改变的那条线?在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’ 。例如:

  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 diffent 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 if 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

  

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/153185.html

(0)
上一篇 2025-03-05 17:20
下一篇 2025-03-05 17:25

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信