(一)圖形對象及其句柄
一、圖形對象
MATLAB圖形對象包括:
1、MATLAB每一個具體圖形一定包括計算機屏幕和圖形窗口兩個對象
二、圖形對象句柄
1、定義
MATLAB在創建每一個圖形對象時,都會給該對象分配一個唯一確定的值,稱其為圖形對象句柄。
PS:(1)計算機屏幕句柄默認為0.
(2)圖形窗口對象的句柄值為一正整數,並顯示在窗口標題欄中
(3)其他圖形對象的句柄為浮點數。
2、獲取已有對象的句柄
3、一個demo
x=linspace(0,2*pi,30); y=sin(x); h0=plot(x,y,'r') %曲線對象的句柄 h1=gcf %圖形窗口句柄 h2=gca %坐標軸句柄 h3=findobj(gca,'Marker','x') %坐標軸上曲線的句柄
運行結果如下:
h0 = 174.0016 h1 = 1 h2 = 173.0011 h3 = Empty matrix: 0-by-1
(二)圖形對象屬性
一、屬性名與屬性值
屬性名:每種對象的每個屬性都規定好了名字,一般為其英文單詞,一般要用單撇號括起來
屬性值:每種屬性名的取值
二、屬性的操作
1、set函數
創建對象時,需要配置各個屬性,否則將會以缺省值進行創建。
(1)調用格式
set(句柄,屬性名1,屬性值1,屬性名2,屬性值2,……) %其中句柄指明要操作的對象 %set中的屬性可以全部缺省
(2)一個demo。
x=0:pi/10:2*pi; h=plot(x,sin(x)); set(h,'Color','b','LineStyle',':','Marker','p');
2、get函數
我們還可以通過get得到屬性值,再進行改變
(1)調用格式
V=get(句柄,屬性名) %V是返回的屬性值 %如果省略屬性名,則返回句柄的所有屬性值。
(2)demo
x=linspace(0.2*pi,20); y=sin(x); h=plot(x,y); col=get(h,'Color'); %得到曲線的顏色 V=get(0,'ScreenSize'); %得到當前窗口的平屏幕分辨率
三、對象的公共屬性
1、Children屬性:
取值是該對象所有子對象的句柄組成的一個向量。
2、Parent屬性:
取值是該對象父對象的句柄。
3、Tag屬性:
取值是一個字符串,作為對象的一個標識符(別名)
4、Type屬性:
表示該對象的類型(顯然是不可以改變的)
5、UserData屬性:
該屬性的取值是一個矩陣,缺省值為空矩陣。一般將一個圖形對象有關的比較重要的數據儲存在這個屬性中,借此達到傳送數據的作用。
一般做法:先用set函數給某一句柄添加一些附加數據(一個矩陣),如果想使用這樣的矩陣,再用get調用出來。
6、Visible屬性:
取值是on(缺省值)或off。決定是否顯示在屏幕上。但是不顯示不代表不存在。
7、ButtonDownFcn屬性:
取值是一個字符串,一般是某個M文件名或一段MATLAB程序。圖形對象巨鼎了一個作用區域,當單擊該區域時,MATLAB自動執行該程序段。
8、CreatFcn屬性:
取值是一個字符串,一般是某個M文件名或一段MATLAB程序。當創建該對象時自動自行該程序段(同構造函數)
9、DeleteFcn屬性:
取值是一個字符串,一般是某個M文件名或一段MATLAB程序。當取消該對象時自動自行該程序段(同析構函數)
一個demo:
x=0:pi/50:2*pi; y=sin(x); z=cos(x); plot(x,y,'r',x,z,'g'); H1=get(gca,'Children'); %獲取兩曲線句柄向量H1 for k=1:size(H1) if get(H1(k),'Color')==[0 1 0] %【0,1,0】表示綠色 H1g=H1(k); %獲取綠色線條句柄 end end pause; %暫停 set(H1g,'LineStyle',':','Marker','p'); %對綠色線條進行設置。
結果:
按下任意鍵
(三)圖形對象測創建
一、圖形窗口對象
1、定義
圖形窗口是MATLAB中很重要的一類圖形對象。MATLAB的一切圖形圖像的輸出都是在圖形窗口中完成的。
2、調用格式:
句柄變量=figure(屬性名1,屬性值1,屬性名2,屬性值2); %屬性名和屬性值可以缺省,則命令如下 句柄變量=figure 或者 figure figure(窗口句柄) %設置為當前窗口。 %如果窗口句柄寫成一個整數,則可以使用這個句柄生成一個新的圖形窗口,並定義為當前窗口。 close(窗口句柄) %關閉圖形窗口 close all; %關閉全部圖形窗口 clf; %清除當前圖形窗口的內容,但不關閉窗口。
3、圖形窗口對象的常用屬性(除了公共屬性)
(1)MenuBar屬性
取值是figure(缺省值)或none,用來控制窗口是否有菜單條。
如果屬性為none,那么用戶可以使用uimenu函數來加入自己的菜單條。
如果屬性為figure,那么窗口保持默認的菜單條,這時可以采用uimenu函數在原默認的圖形窗口菜單后面添加新的菜單項。
(2)Name屬性
取值是字符串,缺省值為空,作為圖形串口的標題
(3)NumberTitle屬性:
取值是on(缺省值)或者off。決定是否以“Figure No.n:“為標題前綴,這里n是圖形窗口的序號,即句柄值。
(4)Resize屬性:
取值為on(缺省值)或off。決定在窗口對象建立后可否用鼠標改變該窗口的大小
(5)Position屬性
(6)Units屬性:
該屬性的取值可以是下列字符串的任何一種:
pixel(像素,缺省值),normalized(相對單位),inches(英寸),centimeters(厘米)和points(磅)。
(7)Color屬性:
取值可以用字符表示,也可以用三元組表示。缺省值為’k’即黑色。
(8)Pointer屬性:
取值是arrow(缺省值)、crosshair、watch、topl、topr、botl、botr、circle、cross、fleur、custom等。
(9)對鍵盤及鼠標響應屬性:
允許對鍵盤和鼠標鍵按下這樣的動作進行響應。
KeyPressFcn | 鍵盤鍵按下響應 |
WindowButtonDownFcn | 鼠標鍵按下響應 |
WindowButtonMotionFcn | 鼠標盈動響應 |
WindowButtonUpFcn | 鼠標鍵釋放響應 |
4、一個demo
x=linspace(0.2*pi,60); y=sin(x); hf=figure('Color',[0,1,0],'Position',[1,1,450,250],'Name','Fuck','NumberTitle','off','MenuBar','none','KeyPressFcn','plot(x,y);axis([0,2*pi,-1,1]);');
結果:
二、坐標軸對象
1、概念
坐標軸對象是圖形窗口對象的子對象,每個圖形窗口中可以定義多個坐標軸對象,但只有一個坐標軸是當前坐標軸,在沒有指明坐標軸,所有的圖形圖像都是在當前坐標軸中輸出。
2、調用格式
句柄變量=axes(屬性名1,屬性值1,屬性名2,屬性值2,……); %調用axes函數用制動的屬性在當前圖形窗口創建坐標軸,並將句柄賦給句柄變量。 axes 或 句柄變量=axes %用axes函數建立缺省坐標軸 axes(坐標軸句柄) %調用axes函數將之設定為當前坐標軸,且坐標軸所在的圖形窗口自動成為當前圖形窗口。
3、坐標軸的常用屬性(除了公共屬性)
(1)Box屬性:
取值是on或者off(缺省值)。它決定坐標軸是否帶有邊框。
(2)GridLineStyle屬性:
取值是‘:’(缺省值)、‘-’、‘-.’、‘--’、‘none’。該屬性定義網格線的類型
(3)Position屬性:
該屬性是由四個元素構成的向量,其形式為[n1,n2,n3,n4]。這個向量在圖形窗口中決定一個矩形區域,坐標軸在其中。
(n1,n2)是左下角的坐標,(n3,n4)是矩形的寬和高。單位由Units屬性決定
(4)Unit屬性:
取值是normalized(相對單位,為缺省值)、inches(英寸)、centimeters(厘米)和points(磅)。
(5)Title屬性:
該屬性的取值是坐標軸標題文字對象的句柄,可以通過該屬性對坐標軸標題文字對象進行操作。
demo:
ans=get(gca,'Title'); set(ans,'Color','r');
(6)XLabel、YLabel、ZLabel屬性:
取值分別為x,y,z軸說明文字的句柄。其操作和Title屬性相同。
demo:
ans=get(gca,'XLabel'); set(ans,'String','Values of X axis');
(7)XLim、YLim、ZLim屬性:
取值都是具有2個元素的數值向量。3個屬性分別定義個坐標軸的上下限。缺省為[0,1]。
(8)XScale、YScale、ZScale屬性:
取值都是’linear’(缺省值)或’log’,這些屬性定義個坐標軸的刻度類型
(9)View屬性:
取值是兩個元素的數值向量,定義視點方向。
4、一個demo:
PS:axes函數可以在同一個圖形窗口上建立多個坐標軸(同時顯示)
clf; x=linspace(0.2*pi,20); y=sin(x); axes('Position',[0.2,0.2,0.2,0.7],'GridLineStyle','-.'); plot(y,x); grid on; axes('Position',[0.4,0.2,0.5,0.5]); t=0:pi/100:20*pi; x=sin(t); y=cos(t); z=t.*sin(t).*cos(t); plot3(x,y,z); axes('Position',[0.55,0.6,0.25,0.3]); [x,y]=meshgrid(-8:0.5:8); z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps); mesh(x,y,z);
三、曲線對象
1、定義
曲線對象是坐標軸的子對象,它既可以定義二維坐標系中,也可以定義在三維坐標系中
2、MATLAB調用:
句柄變量=line(x,y,z,屬性名1,屬性值1,屬性名2,屬性值2,……);
%x,y,z為三維坐標
3、曲線對象的常用屬性(除了公共屬性)
(1)Color屬性:
該屬性的取值是代表某顏色的字符或者RGB值。定義曲線的顏色。
(2)LineStyle屬性:
定義線性
(3)LineWidth屬性:
定義線寬,缺省值為0.5磅。
(4)Marker屬性:
定義數據點標記符號,缺省值為none
(5)MarkerSize屬性:
定義數據點標記符號的大小,缺省值為6磅。
(6)XData,YData,Zdata屬性:
取值都是數值向量或矩陣,分別代表曲線對象的3個坐標軸數據。
4、一個demo
t=0:pi/20:2*pi; y1=sin(t); y2=cos(t); figh=figure('Position',[30,100,800,350]); axes('GridLineStyle','-.','XLim',[0,2*pi],'YLim',[-1,1]); line('XData',t,'YData',y1,'LineWidth',2); line(t,y2); grid on;
四、文字對象
1、用處:
主要用於給圖形添加文字標注,可以使用LaTeX文本。
2、MATLAB調用:
句柄變量=text(x,y,z,'說明文字',屬性名1,屬性值1,屬性名2,屬性值2,……); %說明文字可以使用LaTeX控制字符
3、文字對象的其他常用屬性如下:
(1)Color屬性:
定義文字對象的顏色。
(2)String屬性:
取值是字符串或者字符串矩陣,記錄文字標注的內容。
(3)Interpreter屬性:
取值是latex(缺省值)或none,該屬性控制對文字標注內容的解釋方式,即LaTeX方式或者ASCII方式、
(4)FontSize屬性:
定義文字對象的大小,缺省值為10磅。
(5)Rotation屬性:
取值是數值量,缺省值為0.定義文字對象的旋轉角度。取正值是表示逆時針旋轉。
4、一個demo
x=-pi:0.1:pi; y=sin(x); y1=sin(x); y2=cos(x); h=line(x,y1,'LineStyle',':','Color','g'); line(x,y2,'LineStyle','--','Color','b'); xlabel('-\pi \leq \Theta \leq \pi'); ylabel('sin(\Theta)'); title('Plot of sin(\Theta)'); text(-pi/4,sin(-pi/4),'\leftarrow sin(-\pi\div4)','FontSize',12); set(h,'Color','r','LineWidth',2);
答案下:
五、曲面對象
1、概念:
曲面對象也是坐標軸的子對象,它定義在三維坐標系中,而坐標系可以在任何視點下。
2、調用格式:
句柄變量=surface(x,y,z,屬性名1,屬性值1,屬性名2,屬性2,……);;
3、曲面對象的屬性:
(1)EdgeColor屬性:
取值是代表某顏色的字符或RGB值,還可以是flat、interp或者none。缺省為黑色。定義曲面網格線的顏色或着色方式
(2)FaceColor屬性:
取值是代表某顏色的字符或RGB值,還可以是flat(缺省值),interp或none。定義曲面網格片的顏色或着色方式
(3)LineStyle屬性:
定義曲面網格線的線型
(4)LineWidth屬性:
定義曲面網格線的線寬,缺省值為0.5磅。
(5)Marker屬性:
曲面數據點標記符號,缺省值為none。
(6)MarkerSize屬性:
曲面數據點標記符號的大小,缺省值為6磅。
(7)XData,YData,ZData屬性:
3種屬性的取值都是數值向量或矩陣,分別代表曲面對象的3個坐標軸數據。
4、一個demo
x=linspace(0,4*pi,100); [x,y]=meshgrid(x); z=sin(x); axes('view',[-37.5,30]); hs=surface(x,y,z,'FaceColor','w','EdgeColor','flat'); grid on; set(get(gca,'XLabel'),'String','X-axis'); %設置x軸說明 set(get(gca,'YLabel'),'String','Y-axis'); %設置y軸說明 set(get(gca,'ZLabel'),'String','Z-axis'); %設置z軸說明 title('mesh-surf'); pause; set(hs,'FaceColor','interp','EdgeColor','interp');