MATLAB 中gcf、gca 以及gco 的区别
1.三者的功能定義:
gcf 返回當前Figure 對象的句柄值 gca 返回當前axes 對象的句柄值 gco 返回當前鼠標單擊的句柄值,該對象可以是除root 對象外的任意圖形對象,并且Matlab 會把當前圖形對象的句柄值存放在Figure 的CurrentObject屬性中。
2.matlab下的圖形對象
圖形對象是用以顯示圖形和用戶界面元素的基本元素。下表列出了各種圖形對象。
| 對象 | 描述 |
| Root | 對計算機屏幕最高級的對象 |
| Figure | 用來顯示圖形和用戶界面的窗口 |
| Axes | 在窗口中顯示圖形的軸 |
| Uicontrol | 用戶界面控制。執(zhí)行一個對用戶交互作用的函數(shù)。 |
| Uimenu | 用戶定義窗口菜單 |
| Uicontextmenu | 右鍵單擊對象時彈出的菜單 |
| Image | 二維像素基礎(chǔ)圖 |
| Light | 影響斑點和表面對象著色的光源 |
| Line | 用于諸如plot, plot3, semilogx 等函數(shù)的線 |
| Patch | 帶邊緣的填充多邊形 |
| Rectangle | 二維形狀,從矩形到橢圓 |
| Surface | 由x-y 平面以上的數(shù)據(jù)值所作圖創(chuàng)建的矩陣數(shù)據(jù)的三維表示 |
| Text | 字符串 |
3. 圖形對象級別
不同對象分布在一個樹形結(jié)構(gòu)級別里,反映它們的獨立性。例如,線對象是在軸對象的框架下的。依次,軸對象只存在于figure 對象中。要想對gcf、gca 以及gco 之間的區(qū)別進一步的了解,MATLAB 中的句柄圖形的了解是必要的,以下部分是MATLAB 句柄圖形中關(guān)于gcf、gca 以及gco的部分,供大家參考。
句柄圖形
什么是句柄圖形?句柄圖形是對底層圖形例程集合的總稱,它實際上進行生成圖形的工作。這些細節(jié)通常隱藏在圖形M 文件的內(nèi)部,但如果想使用它們也是可得到的。
MATLAB 用戶指南給人的一種印象是,句柄圖形非常復(fù)雜,只對熟練的高級用戶才有用。而實際上不是這樣的。句柄圖形可以被任何人用來改變MATLAB生成圖形的方式,不論是只想在一幅圖里做一點小變動,還是想做影響所有圖形輸出的全局變動。
句柄圖形允許你定制圖形的許多特性,而這用高級命令和前幾章里描述的函數(shù)是無法實現(xiàn)的。例如,如果想用橘黃色來畫一條線,而不是plot 命令中可用的任何一種顏色,該怎么做呢?句柄圖形就可以提供一種方法。本章不對句柄圖形作詳細討論,因為那樣涉及問題太細。這里的目的只是對句柄圖形概念作基本了解,并提供足夠多的信息,使得即使是偶爾使用一下MATLAB 的用戶也可以利用句柄圖形。
在這個背景下,在本章最后給出了關(guān)于句柄圖形對象屬性和它們的值,它不僅很有用也很有意義。
4. 誰需要句柄圖形?
開始,我們要強調(diào)本章主要是針對那些不滿足于MATLAB 普通圖形特性的讀者。如果對所畫的圖形已經(jīng)很滿意,那么就跳過當前的討論。如果以后要定制
圖形,只要記住這里有可用的信息。
現(xiàn)在,對于那些還在猶豫的用戶,我們要強調(diào)學(xué)習(xí)使用句柄圖形并不困難。如果只想改變圖形的標題字體,或者改變一個圖形窗口的背景顏色,那么,你不必成為一個句柄圖形的專家也可做到。另一方面,如果想定制圖形,并且要打算對圖形的每個可能方面進行控制,那么句柄圖形會為此提供強有力的工具。前面那些章提供的圖形功能被認為是高級的命令和函數(shù),包括plot,mesh,axis 及其它。這些函數(shù)是建立在底層函數(shù)和屬性的基礎(chǔ)上,總稱為句柄圖形。
什么是句柄圖形對象
句柄圖形是基于這樣的概念,即一幅圖的每一組成部分是一個對象,每一個對象有一系列句柄和它相關(guān),每一個對象有按需要可以改變的屬性。當今計算機行業(yè)最流行的術(shù)語之一便是對象這個詞。面向?qū)ο蟮木幊陶Z言,數(shù)據(jù)庫對象,操作系統(tǒng)和應(yīng)用程序接口都使用了對象的概念。一個對象可以被粗略地定義為由一組緊密相關(guān)、形成唯一整體的數(shù)據(jù)結(jié)構(gòu)或函數(shù)集合。在MATLAB中,圖形對象是一幅圖中很獨特的成分,它可以被單獨地操作。由圖形命令產(chǎn)生的每一件東西都是圖形對象。它們包括圖形窗口或僅僅說是圖形,還有坐標軸、線條、曲面、文本和其它。這些對象按父對象和子對象組成層次結(jié)構(gòu)。
計算機屏幕是根對象,并且是所有其它對象的父親。圖形窗口是根對象的子對象;坐標軸和用戶界面對象(在下一章討論)是圖形窗口的子對象;線
條、文本、曲面、補片和圖象對象是坐標軸對象的子對象。
根可包含一個或多個圖形窗口,每一個圖形窗口可包含一組或多組坐標軸。所有其它的對象(除了在下一章討論的uicontrol 和uimenu 外)都是坐標軸的子對象,并且在這些坐標軸上顯示。所有創(chuàng)建對象的函數(shù)當父對象或?qū)ο蟛淮嬖跁r,都會創(chuàng)建它們。例如,如果沒有圖形窗口,plot(rand(size([1:10])))函數(shù)會用缺省屬性創(chuàng)建一個新的圖形窗口和一組坐標軸,然后在這組坐標軸內(nèi)畫線。
句柄對象
假設(shè)已打開了三個圖形窗口,其中兩個有兩幅子圖。并要改變其中一幅子圖坐標軸內(nèi)一條線的顏色,如何認定想要改變的那條線?在MATLAB 中,每一個對象都有一個數(shù)字來標識,叫做句柄。
每次創(chuàng)建一個對象時,就為它建立一個唯一的句柄。計算機屏幕作為根對象常常是0。? Hf_fig=figure 命令建立一個新的圖形窗口,變量Hf_fig 中返回它
的句柄值。圖形窗口的句柄為整數(shù),通常顯示在圖形窗口標題條中。其它對象句柄是MATLAB 滿精度的浮點值。
MATLAB 可以用來獲得圖形、坐標軸和其它對象的句柄。例如,Hf_fig=gcf返回當前圖形窗口的句柄值,而 Ha_ax=gca 返回當前圖形窗口內(nèi)當前坐標軸
的句柄值。這些函數(shù)和其它對象操作的工具在本章以后討論。
為了提高可讀性,在本書中包含句柄對象的變量取名以大寫的H 開頭,跟之以一個辨識對象類型的字母,然后是一個下劃線,最后是一個或幾個描述符。
因此,Hf_fig 是一個圖形窗口的句柄,Ha_ax1 是坐標軸對象的句柄,而Ht_title是一個文本對象的句柄。當對象類型不知道時,用字母x,比如Hx_obj。雖然
句柄變量可以取任意名字,遵循這種規(guī)則使得能在M 文件中很容易找到句柄變量。
所有產(chǎn)生對象的MATLAB 函數(shù)都為所建立的每個對象返回一個句柄(或句柄的列向量)。這些函數(shù)包括plot,mesh,surf 及其它。有一些圖形由一個以
上對象組成。比如,一個網(wǎng)格圖由一個曲面組成,它只有一個句柄;而waterfall圖形由許多線條對象組成,每個線條對象都有各自的句柄。
例如,? Hl_wfall=waterfall(peaks(20)) 對線條返回一個包含著2 得了一個對象的句柄,它的對象類型可以通過查詢對象的 'Type' 屬性來獲得。該屬性是
一個字符串對象名,比如 'figure' ,'axes' 或 'text' 。例如:
x_type=get(Hx_obj, 'Type' )
MATLAB 中的函數(shù)gcf,gca 和gco 是很好的例子,它們說明如何利用句柄圖形來獲得有關(guān)對象的信息。函數(shù)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' );
類似的,函數(shù)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' );
函數(shù)gco 也相同,只是它在試圖獲得當前對象之前先檢查圖形是否存在。注意函數(shù)gcf 和gca 能促使建立相關(guān)的對象,如果它們不存在的話。如下所示的函數(shù)gco,它先檢查子對象( 'Children' )是否存在,如果不存在,就不創(chuàng)建圖形對象。
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' 之外的某些東西時,可以用函數(shù)get 來獲得一個對象的子對象的句柄向量。例如: Hx_kids=get(gcf, 'Children' )返回一個向量,它包含當前圖形子對象的句柄。 可以用獲得子對象 'Children' 句柄的技術(shù)徹底搜索句柄圖形的層次結(jié)構(gòu)中來找到所要的對象。例如,在畫出一些數(shù)據(jù)后,尋找綠色線條句柄的問題。 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
總結(jié)
以上是生活随笔為你收集整理的MATLAB 中gcf、gca 以及gco 的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 职场实用和常用的十大心理学效应
- 下一篇: 图像处理与计算机视觉中upscale,d