Matlab圖形對象函數set和get


  Matlab中,所有對象都有屬性定義它們的特征,正是通過設定這些屬性來修正圖形顯示的方式。盡管許多屬性所有的對象都有,但與每一種對象類型(比如坐標軸,線,曲面)相關的屬性列表都是獨一無二的。對象屬性可包括諸如對象的位置、顏色、類型、父對象、子對象及其它內容。每一個不同對象都有和它相關的屬性,可以改變這些屬性而不影響同類型的其他對象。和每一種對象類型(圖形,坐標軸,線,文本,曲面,補片和圖象)相關的完整的屬性列表在本章的后面給出。
   對象屬性包括屬性名和與它們相關聯的值屬性名是字符串,它們通常大小寫混合顯示,每個詞的開頭字母大寫,比如:’ LineStyle ‘ 。但是,MATLAB識別一個屬性時是不分大小寫的,只要用足夠多的字符來唯一地辨識一個屬性名即可。例如,坐標軸對象中的位置屬性可以用 ‘ Position ‘ ‘ position ‘ 甚至是 ‘ pos ‘來調用。
   當建立一個對象時,它用一組缺省屬性值,該值可以用兩種方法來改變。可以用{屬性名,屬性值}對來建立對象生成函數;或者在對象建立后改變屬性。前一種方法的例子是:
   » Hf_1=figure( ‘color’, ‘white’ )
   它用缺省的屬性值建立一個新的圖形窗口,只是背景顏色被設為白色而不是缺省的黑色。
   為了獲得改變句柄圖形對象的屬性只需要兩個函數。函數get返回某些對象屬性的當前值。使用函數get的最簡單語法是get(handle, ‘ PropertyName’ )。例如:
   » p=get(Hf_1, ‘position’ )
返回具有句柄Hf_1圖形窗口位置向量
   » c=get(Hl_a, ‘color’ )
返回具有句柄Hl_a對象的顏色
   函數set改變句柄圖形對象屬性,使用語法set(handle, PropertyName’ ,value)。例如:
   » set(Hf_1, ‘Position’ ,p_vect)
將具有句柄Hf_1圖形位置設為向量p_vect所指定的值。同樣
   » set(Hl_a, ‘color’ , ‘r’ )
將具有句柄Hl_a的對象的顏色設置成紅色
   一般情況下,函數set可以有任意數目的( PropertyName’ ,PropertyValue)對。比如:
   » set(Hl_a, ‘Color’ , ‘r’ , ‘Linewidth’ ,2, ‘LinStyle’ , ‘--’ 
將具有句柄Hl_a線條變成紅色線寬為2線型為破折號
   除了這些主要功能,函數set和函數get還能提供幫助。例如» set(handle, ‘PropertyName’ )返回一個可賦給handle所描述對象的屬性值列表。例如:
   » set(Hf_1, ‘Units’ )
   [inches|centimeters|normalized|points|{pixels}]  ---------屬性值列表
表明由Hf_1所引用的圖形 Unites屬性是五個可允許的字符串,而其中 pixels 缺省值
   如果指定一個沒有固定值的屬性,那么,MATLAB就會通知如下:
   » set(Hf_1, ‘Position’ )
   A   figure’s   ‘Position’   property   does   not   have   a   fixed   set   of   property   values
   除了set命令,句柄圖形對象創建函數(例如figureaxisline等等)接受多個屬性名和屬性值對。例如:
   » figure( ‘Color’ , ‘blue’ , ‘NumberTitle’ , ‘off’ , ‘Name’ , ‘My   Figure’ 
創建一個圖形窗口,背景為蘭色,標有 ‘My   Figure’ 而不是缺省標題 ‘Figure   No.   1’
   為了形象說明上述概念,考慮下面的例子:

>>  Hf_fig =figure  %   create a figure having an interger handle

Hf_fig =

     1

>>  Hl_line=line   %   create a line having a floating-pointer handle

Hl_line =

  173.0011

>> set(Hl_line)   %   list settable properties and potential values
	DisplayName
	Color
	LineStyle: [ {-} | -- | : | -. | none ]
	LineWidth
	Marker: [ + | o | * | . | x | square | diamond | v | ^ | > | < | pentagram | hexagram | {none} ]
	MarkerSize
	MarkerEdgeColor: [ none | {auto} ] -or- a ColorSpec.
	MarkerFaceColor: [ {none} | auto ] -or- a ColorSpec.
	XData
	YData
	ZData

	ButtonDownFcn: string -or- function handle -or- cell array
	Children
	Clipping: [ {on} | off ]
	CreateFcn: string -or- function handle -or- cell array
	DeleteFcn: string -or- function handle -or- cell array
	BusyAction: [ {queue} | cancel ]
	HandleVisibility: [ {on} | callback | off ]
	HitTest: [ {on} | off ]
	Interruptible: [ {on} | off ]
	Parent
	Selected: [ on | off ]
	SelectionHighlight: [ {on} | off ]
	Tag
	UIContextMenu
	UserData
	Visible: [ {on} | off ]

>> get(Hl_line);   %   list properties and current property values
	DisplayName = 
	Annotation = [ (1 by 1) hg.Annotation array]
	Color = [0 0 0]
	LineStyle = -
	LineWidth = [0.5]
	Marker = none
	MarkerSize = [6]
	MarkerEdgeColor = auto
	MarkerFaceColor = none
	XData = [0 1]
	YData = [0 1]
	ZData = []

	BeingDeleted = off
	ButtonDownFcn = 
	Children = []
	Clipping = on
	CreateFcn = 
	DeleteFcn = 
	BusyAction = queue
	HandleVisibility = on
	HitTest = on
	Interruptible = on
	Parent = [174.001]
	Selected = off
	SelectionHighlight = on
	Tag = 
	Type = line
	UIContextMenu = []
	UserData = []
	Visible = on

   在上例中,所創建的線條中的 Parent屬性就是包含線條坐標軸的句柄。而且所顯示的圖形列表被分為兩組。在空行上的第一組,列出了該對象的獨有屬性,而空行下的第二組列出所有的對象共有的屬性。注意到函數set和函數get返回不同的屬性列表。函數set只列出可以用set命令改變的屬性,而get命令列出所有對象屬性。在上面的例子中,函數get列出了 ‘Children’ ‘Type’ 屬性,而set命令卻沒有。這一類屬性只可讀,但不能被改變,它們叫做只讀屬性
   每一個對象有關屬性數目是固定的,但不同的對象類型有不同數目屬性。像上面所顯示的,一個線條對象列出了16個屬性,而一個坐標軸對象列出了64個屬性。顯然,透徹地說明和描述所有對象類型的全部屬性超出次討論的范圍。
   除了函數setgetMATLAB還提供了另外兩個函數來操作對象和它們的屬性任意對象和它們的子對象可以用 » delete(handle) 刪除。同樣 » reset(handle) 將與句柄有關的全部對象屬性(除了 Position 屬性)重新設置為該對象類型的缺省值


 

句柄式圖形常用函數:
(1)get(h)返回句柄值h所指定的圖形對象的所有屬性名稱與相對應的屬性值
(2)a = get(h)返回由句柄值h所指定的圖形對象的屬性結構數組,並且該數組的字段名稱就是該對象的屬性名稱
(3)a = get(0,'factory')返回所有能由用戶設置屬性默認定義值
(4)a = get(0,'FactoryObjectTypePropertyName1','FactoryObjectTypePropertyName2',...)返回指定對象類型指定的屬性值,輸入參數FactoryObjectTypePropertyName為一個關鍵詞,由字符Factory與圖形對象類型(如Figure)還有屬性名稱(如Color)組成。
a = get(0,'factoryFigureColor')返回Figure對象的Color屬性值。
(5)a = get(h,'DefaultObjectTypePropertyName1','DefaultObjectTypePropertyName1',...)返回句柄值為h的對象指定屬性默認值。如“DefaultFigureColor”。
(6)a = get(h,'default')列出h對象所有屬性默認屬性值。
(7)a = set(h)返回句柄值h所指定的圖形對象所有屬性名稱對應的可設置屬性值,a為結構數組,存儲對象的屬性名稱,其字段值為相對應的屬性值。屬性值中用{}括起來的表示默認值
(8)set(h,a)使用指定的屬性值來設置由句柄值h所指定的對象屬性,a為結構數組,其字段名稱為對象的屬性名稱字段值為相對應的屬性值
(9)a = set(0,'factory')返回那些用戶可以設置默認值所有對象屬性,同時顯示可設置的屬性值
(10)a=set(0,'FactoryObjectTypePropertyName')返回所有對象指定屬性名稱FactoryObjectTypePropertyName的所有可能的屬性值
(11)a = set(h,'屬性名','屬性值')設置句柄值為h的對象的與屬性名對應的屬性值。
(12)set(h,'DefaultObjectTypePropertyName1','DefaultObjectTypePropertyName2',...)對句柄值為h的對象設置特定屬性名稱的屬性默認值。
(13)H = findobj;返回Root對象與其所有子對象的句柄值
(14)H = findobj(h);返回h變量的句柄值
(15)H = findobj(’屬性名稱‘,’屬性值‘);依據對象的屬性名稱和屬性值找出匹配的對象句柄值。
(16)H = findobj(ObjectHandles,’屬性名稱‘,’屬性值‘);根據限定的對象列表找出與對象的屬性名稱和屬性值匹配的對象句柄值
(17)gcf返回當前Figure對象的句柄值
    gca返回當前axes對象的句柄值
    gco返回當前鼠標單擊的句柄值,該對象可以是除root對象外的任意圖形對象,並且Matlab會把當前圖形對象的句柄值存放在Figure的CurrentObject屬性中

Figure對象的屬性篇
(1).^是矩陣每個元素的冪乘,^是數的冪乘。
(2)set(handle)列出句柄值為handle的對象的所有屬性
  get(handle)除列出上述屬性外,還列出可以設置的屬性
  reset(handle)將所有屬性改為默認值
  delete(handle)刪除句柄值為handle的圖形對象
(3)利用set(handle,‘屬性名稱’)獲得句柄值為handle的對象的屬性名稱下所有可設置的屬性值
  set(gcf,'units):得到[ inches | centimeters | normalized | points | {pixels} | characters ],其中,大括號中是默認值
(4)clf reset;將窗口關閉,並重新設置其屬性為默認值。
(5)Closerequestfcn,有效值為字符串或函數句柄(前加@)
當關閉繪圖窗口或離開Matlab時,就會定義Closerequestfcn定義的函數
(6)createfcn,當Matlab建立一個對象時(如為figure對象,即打開一個繪圖窗口),就會觸發createfcn所定義的callback程序。如set(0,'defaultfigurecreatefcn','set(gcbo,''integerhandle'',''off'')');即設置了根對象的默認值,使每次建立figure對象時,都會指定一個非整數的句柄值。(在用戶未指定句柄值時)
(7)將當前窗口中在鍵盤上按下的按鍵名顯示出來。
set(gcf,'keypressfcn','get(gcf,''currentcharacter'')')
(8)color有效值為colorspec
colorspec表:
RGB 簡稱
[110] y_yellow
[101] m_magenta
[011] c_cyan
[100] r_red
[010] g_green
[001] b_blue
[111] w_white
[000] k_black
(9)linspace(a,b,c):a初始b結束c線性分段次數linspace(a,b)則默認100次
(10)CurrentObject:有效值為圖形對象句柄值:返回繪圖窗口內當前被鼠標選取的對象的句柄值
(11)currentPoint:有效值[x-坐標,Y-坐標]返回繪圖窗口中最后單擊鼠標的位置,用get(gcf,'currentpoint')就會返回當前在窗口中單擊鼠標的位置
(12)DeleteFcn:有效值:字符串或函數句柄,刪除對象(這里為figure)時會觸發Deletefcn所定義的Callback程序。
(13)Dockcontrols:有效值為on/off,默認值on,控制窗口的嵌入效果是否可用。
(14)Hittest:有效值on/off,決定能否用鼠標選取對象為當前對象。
(15)Integerhandle:有效值on/off,決定Figure對象句柄值的類型為整數或浮點小數。
(16)Interruptible:有效值on/off,執行過程中需要中斷程序而優先執行其他程序時要設該屬性為on。即Interrupptible屬性是用以控制當Callback執行時是否能被其他事件(如此時鼠標按下其他控制對象)而中斷,on是會中斷,off時會執行完當前Callback,再去執行其他Callback。
(17)Keypressfcn:有效值為字串或函數句柄。當用戶在figure窗口中按下鍵盤的任意鍵時,就會執行Keypressfcn所定義的Callback程序。
figure('keypressfcn','fprintf(''當前按下鍵盤上的%c鍵\n'',get(gcf,''currentcharacter''))')在這個figure窗口中按下鍵盤上的按鍵時就會立即返回對應的字符,依據這個效果就可以決定當字符鍵被按下時所要執行的操作。
當這個屬性指定的值是一個函數句柄時,Matlab就會將這個函數視為一個結構,包含下列字段——character(以當前鍵盤上按下的按鍵顯示的字符來當作結果),modifier(包含一個或多個識別鍵盤上按下按鍵字符名稱的細胞數組(如Ctrl,Alt,Shift等),key(顯示被按下的鍵)。
(18)WindowButtonDownFcn:有效值為字符串或函數句柄
當鼠標在繪圖窗口內按下鼠標任意鍵時,將觸發WindowButtonDownFcn所定義的Callback以產生相對應的操作。
(19)WindowButtonMotionFcn:有效值為字符串或函數句柄
當鼠標在繪圖窗口內按住鼠標任意鍵移動,將觸發WindowButtonMotionFcn所定義的Callback以產生相對應的操作。
(20)WindowButtonUpFcn:有效值為字符串或函數句柄
當鼠標在繪圖窗口內釋放鼠標任意鍵時,將觸發WindowButtonUpFcn所定義的Callback以產生相對應的操作。
(21)CurrentAxes有效值為當前坐標軸的句柄值,返回當前的坐標軸句柄值。假設某坐標軸句柄值為a_h,可以使用axes(a_h)或set(gcf,'currentaxes',a_h)這兩種方式,制定句柄值為a_h的坐標軸為當前坐標軸。
(22)CurrentCharacter:有效值為任意字符,返回用戶在繪圖窗口中最后輸入的一個字符,即剛在鍵盤上按下的字符鍵將存儲到Currentcharacter中,一般於Keyppressfcn合用。
(23)Currentobject有效值為圖形對象的句柄值,返回繪圖窗口內當前被鼠標選取的對象的句柄值。
(24)有效值為兩元素的向量,[X坐標,Y坐標]
返回繪圖窗口中最后單擊鼠標的位置,與Windowbuttonmotionfcn,Windowbuttonupfcn合用。使用get(gcf,'currentpoint')就會返回當前在窗口中單擊鼠標的位置。

Axes對象的屬性
(1)title('new','color','r');給坐標軸命名為new,紅色
    title({'this title','has 2 '});命名為兩行的標題
(2)Units:有效值為pixels/normalized/inches/centimeters/points/characters
決定各種位置屬性的度量單位,相對於窗口左下角為基准。當設置為Pixels時,以像素為單位;當設置為normalized時,以坐標為單位,屏幕的左下角為[0,0],右上角為[1.0,1.0]。
(3)grid on:在圖像中顯示網格。
(4)children:控制axes對象的子對象,即image\light\line\patch\rectangle\surface和text等對象,可通過get(gca,'children')來返回當前坐標軸的子對象構成的句柄值向量。
(5)字體屬性:
Fontangle字體角度(正常normal或斜體italic/oblique)
Fontname字體名稱
fontsize字體大小(單位由Fontunits決定)
fontunits字體單位(points/normalized/inches/centimeters/pixels)
fontweight字體粗細(normal/bold/light/demi)
gridlinestyle決定坐標軸網格線的樣式,‘-’為實線‘- -’為虛線‘:’為點線‘-.’為點虛線
plot(1:10);grid on;set(gca,'gridlinestyle','-.');將當前坐標軸顯示的網格線為點-虛線
(6)linewidth 定義X,Y和Z軸的軸線寬度(以點單位定義)
(7)NextPlot:有效值為add|replace|replacechildren,默認為replace
  add表示使用當前的坐標軸,把新的圖形對象加到此坐標軸中是一般保留的做法,replace表示重新設置坐標軸的所有屬性(Position除外),也就是在繪圖前會刪除當前坐標軸和它的子對象。            replacechildren表示移除當前坐標軸中所有子對象,但不重新設置坐標軸的所有屬性
(8)Outerposition決定坐標軸外邊界的位置。由位置向量[left,bottom,width,height]組成,其中left,bottom表示相對於繪圖窗口左下角的位置,width,height表示區域尺寸,默認為[0 0 1 1]
(9)Position由位置向量[left,bottom,width,height]組成,決定坐標軸位置
(10)Tag定義本坐標軸的卷展欄,因為每一個對象都有自己唯一的識別碼即tag,以方便findobj函數查找坐標軸句柄值。
(11)visible決定坐標軸是否可見
(12)set(gca,'xgrid','on')繪制X軸垂直網格線
    set(gca,'gridlinestyle',':','linewidth',3)設置網格線線條類型和寬度
    set(gca,'box','on')將圖軸方框繪制出來
(13)set(gca,'xscale','linear');將X軸刻度設為線性
    set(gca,'yscale','log');將Y軸刻度設為對數
(14)disp()顯示一個數組,但不顯示其數組名稱
    disp(' Corn Oats Hay')
    disp(rand(5,3))
which results in
Corn Oats Hay
0.2113 0.8474 0.2749
0.0820 0.4524 0.8807
0.7599 0.8075 0.6538
0.0087 0.4832 0.4899
0.8096 0.6135 0.7741

Pause:pause, by itself, causes M-files to stop and wait for you to press any key before continuing.

實例:plot(1:10);set(gca,'yscale','log');
disp('請按下Enter鍵');
pause
set(gca,'Yscale','linear');本例是說按下Enter鍵將Y軸刻度由對數改為線性。
(16)Xtick,Ytick,Ztick:控制X,Y,Z軸坐標刻度記號的位置,即控制坐標軸上刻度記號的位置以及每隔多少值會到下一個刻度記號的位置,同時還需要配合Xticklabel、Yticklabel、Zticklabel屬性來調整。詳細見例程。
以下設置方式相同:
set(gca,'Xticklabel',{'1';'10';'100'})
set(gca,'Xticklabel','1|10|100')
set(gca,'Xticklabel',[1;10;100])
set(gca,'Xticklabel',['1 ';'10 ';'100'])
(17)Findobj:查找

Line對象
當用戶建立一個線對象時,就會觸發Createfcn所定義的Callback產生相對應的操作;同樣,若刪除一個線對象時,就會觸發DeleteFcn所定義的Callback產生相對應的操作。以下程序建立一個線對象,並設置DeleteFcn為一個問題對話框,當刪除該線對象時,就會顯示其問題對話框來詢問用戶。
  (1) clipping:有效值為on/off,默認值為on
設置坐標軸土筐是否可以剪輯,如果設為off,則繪制線對象時可超出坐標軸的圖框。
(2)Linewidth:有效值為純量(與向量相對,只有大小而無方向),點為單位。
(3)Marker:有效值為字符,決定Line對象的記號類型,有+,o,*,.,x,s,d,等
(4)Markersize:有效值為純量,單位為點,Marker的大小。
(5)UIcontextmenu:有效值為uicontextmenu對象的句柄值,定義與線對象相關聯的uicontextmenu菜單,因此當用戶將該線對象的屬性UicontextMenu設置為相關聯的uicontextmenu對象的Tag名稱時,uicontextmenu就可以在該線對象上單擊鼠標右鍵來顯示uicontextmenu菜單。
(6)Tag:有效值為字符串,定義改線對象的卷展欄(即標記)
(7)Type:有效值為字符串(只讀),此處為’line‘字符串。
(8)Xdata,Ydata,Zdata:有效值為坐標數組,指定產生線條的數據點,若為2D環境則Xdata、Ydata需要有相同數目的數據,而Zdata為空矩陣;3D環境則Xdata,Ydata,Zdata三者都需要有相同數目的數據。
例:x=0:5,y=x+10;line('xdata',x,'ydata',y);

Patch對象
patch函數不像其他高級區域建立函數(fill和area),只是簡單地將patch對象添加到當前坐標軸中而已。
使用:patch(X,Y,C)
在當前的坐標軸中添加二維填充的patch對象,X和Y用以定義patch對象頂點的位置,若X,Y為矩陣,則Matlab按每一行的元素來產生多個多邊形。
例:x = [0 0;0 1;1 1];
  y = [1 1;2 2;2 1];
  z = [1 1;1 1;1 1];(x(1,1),y(1,1),z(1,1)為第一個面的第一個頂點,x(2,1),y(2,1),z(2,1)為第一個面的第二個頂點,以此類推)
tcolor(1,1,1:3) = [1 1 1];
tcolor(1,2,1:3) = [.7 .7 .7];
patch(x,y,z,tcolor);(tcolor是一個1*2*3的三維矩陣)

Surface對象
surface可以建立一個surface對象,surface是由矩陣數據所在的列索引值為X坐標,而行索引值為Y坐標,並且矩陣的每個元素值為Z坐標。

image對象
image(C)將矩陣C當作一個圖像來顯示,C的每一個元素定義一個圖像中矩陣線段的顏色。
image(x,y,C)其中x與y為2元素的向量,分別指定X軸與Y軸卷展軸的范圍。C為圖像矩陣。

text對象
(1)text(x坐標,y坐標,'string')在圖形中指定位置(x,y)顯示字符串string。
(2)Editing有效值為on/off,off時,用戶在執行GUI操作時無法直接在該Text對象上進行編輯,改為on后,可以進行編輯。
(3)HorizontalAlign 有效值為left/center/right決定Text對象中字符水平方向的對齊方式。
(4)Interpreter有效值為tex/none,決定Text對象中是否可用Tex字符注釋,當設置為Tex時,表示允許用戶能夠在String屬性下輸入Tex字符。以下為在窗口的 [.5 .5]點位置處建立一個text對象並且字體大小以16點來表示的一個方程式。(顯示的是一個二重積分)
text('interpreter','latex','string','$$\int_0^x\!\int_y dF(u,v)$$','position',[.5 .5],'fontsize',16)
(5)String有效值為字符串,表示要顯示出來的字符串是什么。
(6)verticalAlignme 有效值為top/cap/middle/baseline/bottom決定Text對象垂直對齊的方式。

下面加載一個例子,是ilovematlab論壇一個斑竹的回復
x=0:0.5:10;
>> y1=sin(x);
>> y2=cos(x);
>> plot(x,y1,'r',x,y2,'g')
>> findobj(gca,'color','r')

不想要的曲線直接delete句柄就可以了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM