1.MATLAB給每種對象的每一個屬性規定了一個名字,稱為屬性名,而屬性名的取值成為屬性值。例如,LineStyle是曲線對象的一個屬性名,它的值決定着線型,取值可以是'-' 、':'、'-.'、'--'或'none'。
2.屬性的操作
set函數的調用格式為:
set(句柄,屬性名1,屬性值1,屬性名2,屬性值2,…)
例子:
clear
x=0:0.2:12;
y1=bessel(1,x);
y2=bessel(2,x);
y3=bessel(3,x);
h=plot(x,y1,x,y2,x,y3);
set(h,{'LineWidth'},{2;5;8}) %set(h,{'LineWidth'},{2})==set(h,'LineWidth',2),將所有線寬設置為2
set(h,{'Color'},{'r';'g';'b'},{'LineStyle'},{'--';':';'-.'}) %設置顏色和線寬
axis([0 12 -0.5 1]) %設置坐標軸范圍
grid on
X=0:1:12;
Y=-0.5:0.25:1;
set(gca,'xtick',X,'ytick',Y) %設置網格的顯示格式,gca獲取當前figure的句柄
set(xlabel('Time'),'FontSize',12,'Color','r')
y=ylabel('Amplitude');
set(y,'FontSize',12,'Color','g')
legend(h,'First','Second','Third') %添加圖例
title('Bessel Functions') %添加標題
[y,ix]=min(y1); %找到y1的最小值以及改值的下標,賦給y和ix
text(x(ix),y,'First Min \rightarrow','HorizontalAlignment','right') %插入文本
具體可改哪些屬性值
---------------------------------------------------------------------------------------
這兩天在看句柄式圖形方面的東西,以下是我在看書過程中整理的學習筆記,比較詳細的介紹了句柄以及與其密切相關的各種圖形對象和它們的屬性。希望能對初學Matlab界面設計的朋友們有所幫助。
GUI學習筆記:
句柄式圖形常用函數:
(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句柄就可以了
---------------------------------------------------------------------------------------
gcf 是返回當前被激活的窗口的圖形對象的句柄。你可以認為它就指代當前窗口。
figure(gcf)打開這個窗口。
gca返回當前axes對象的句柄值
gco返回當前鼠標單擊的句柄值,該對象可以是除root對象外的任意圖形對象,並且Matlab會把當前圖形對象的句柄值存放在Figure的CurrentObject屬性中
Figure對象的屬性篇