MATLAB學習筆記(十)——MATLAB圖形句柄


(一)圖形對象及其句柄

一、圖形對象

       MATLAB圖形對象包括:

image

1、MATLAB每一個具體圖形一定包括計算機屏幕和圖形窗口兩個對象

二、圖形對象句柄

1、定義

     MATLAB在創建每一個圖形對象時,都會給該對象分配一個唯一確定的值,稱其為圖形對象句柄。

PS:(1)計算機屏幕句柄默認為0.

      (2)圖形窗口對象的句柄值為一正整數,並顯示在窗口標題欄中

      (3)其他圖形對象的句柄為浮點數。

2、獲取已有對象的句柄

image

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

image

 

(二)圖形對象屬性

一、屬性名與屬性值

屬性名:每種對象的每個屬性都規定好了名字,一般為其英文單詞,一般要用單撇號括起來

屬性值:每種屬性名的取值

二、屬性的操作

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');

image

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:

image

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');     %對綠色線條進行設置。

結果:

image

按下任意鍵

 image

 

(三)圖形對象測創建

一、圖形窗口對象

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]);');

結果:

image

二、坐標軸對象

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);

image

三、曲線對象

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;

image

四、文字對象

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);

答案下:

image

五、曲面對象

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');
結果:

imageimage


免責聲明!

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



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