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