?作為一個(gè)功能強大的工具軟件,Matlab具有很強的圖形處理功能,提供了大量的二維、三維圖形函數。由于系統采用面向對象的技術(shù)和豐富的矩陣運算,所以在圖形處理方面即常方便又高效。
二維圖形
? 一、 plot函數
? 函數格式 :plot(x,y) 其中x 和y 為坐標向量
? 函數功能 :以向量x 、y 為軸,繪制曲線(xiàn)。
? 【例1】 在區間0≤X≤2p內,繪制正弦曲線(xiàn)Y=SIN(X),其程序為:
x=0:pi/100:2*pi;
y=sin(x);
plot(x,y)
? 【例2】同時(shí)繪制正、余弦兩條曲線(xiàn)Y1=SIN(X)和Y2=COS(X),其程序為:
x=0:pi/100:2*pi;
y1=sin(x);
y2=cos(x);
plot(x,y1,x,y2)
?plot函數還可以為plot(x,y1,x,y2,x,y3,…)形式,其功能是以公共向量x為X軸,分別以y1,y2,y3,…為Y軸,在同一幅圖內繪制出多條曲線(xiàn)。
? (一)線(xiàn)型與顏色
? 格式:plot(x,y1,’cs’,...)
? 其中c表示顏色, s表示線(xiàn)型。
?(二)圖形標記
?在繪制圖形的同時(shí),可以對圖形加上一些說(shuō)明,如圖形名稱(chēng)、圖形某一部分的含義、坐標說(shuō)明等,將這些操作稱(chēng)為添加圖形標記。
?title(‘加圖形標題');
?xlabel('加X軸標記');
?ylabel('加Y軸標記');
?text(X,Y,'添加文本');
?(三)設定坐標軸
?用戶(hù)若對坐標系統不滿(mǎn)意,可利用axis命令對其重新設定。
?axis([xmin xmax ymin ymax]) 設定最大和最小值
?axis (’auto’) 將坐標系統返回到自動(dòng)缺省狀態(tài)
?axis (’square’) 將當前圖形設置為方形
?axis (’equal’) 兩個(gè)坐標因子設成相等
?axis (’off’) 關(guān)閉坐標系統
?axis (’on’) 顯示坐標系統
? 【例4】 在坐標范圍0≤X≤2π,-2≤Y≤2內重新繪制正弦曲線(xiàn),其程序為:
x=linspace(0,2*pi,60);生成含有60個(gè)數據元素的向量X
y=sin(x);
plot(x,y);
axis ([0 2*pi -2 2]);設定坐標軸范圍
? (四)加圖例
? 給圖形加圖例命令為legend。該命令把圖例放置在圖形空白處,用戶(hù)還可以通過(guò)鼠標移動(dòng)圖例,將其放到希望的位置。
? 格式:legend('圖例說(shuō)明','圖例說(shuō)明');
? (一)subplot(m,n,p)
? 該命令將當前圖形窗口分成m×n個(gè)繪圖區,即每行n個(gè),共m行,區號按行優(yōu)先編號,且選定第p個(gè)區為當前活動(dòng)區。
? 【例6】 在一個(gè)圖形窗口中同時(shí)繪制正弦、余弦、正切、余切曲線(xiàn),程序為:
? x=linspace(0,2*pi,60);
? y=sin(x);
? z=cos(x);
? t=sin(x)./(cos(x)+eps); eps為系統內部常數
? ct=cos(x)./(sin(x)+eps);
? subplot(2,2,1); 分成2×2區域且指定1號為活動(dòng)區
? plot(x,y);
? title('sin(x)');
? axis ([0 2*pi -1 1]);
? subplot(2,2,2);
?(二)多圖形窗口
?需要建立多個(gè)圖形窗口,繪制并保持每一個(gè)窗口的圖形,可以使用figure命令。
?每執行一次figure命令,就創(chuàng )建一個(gè)新的圖形窗口,該窗口自動(dòng)為活動(dòng)窗口,若需要還可以返回該窗口的識別號碼,稱(chēng)該號碼為句柄。句柄顯示在圖形窗口的標題欄中,即圖形窗口標題。用戶(hù)可通過(guò)句柄激活或關(guān)閉某圖形窗口,而axis、xlabel、title等許多命令也只對活動(dòng)窗口有效。
? 重新繪制上例4個(gè)圖形,程序變動(dòng)后如下:
? x=linspace(0,2*pi,60);
? y=sin(x);
? z=cos(x);
? t=sin(x)./(cos(x)+eps);
? ct=cos(x)./(sin(x)+eps);
? H1=figure; 創(chuàng )建新窗口并返回句柄到變量H1
? plot(x,y); 繪制圖形并設置有關(guān)屬性
? title('sin(x)');
? axis ([0 2*pi -1 1]);
? H2=figure; 創(chuàng )建第二個(gè)窗口并返回句柄到變量H2
? plot(x,z); 繪制圖形并設置有關(guān)屬性
? title('cos(x)');
? (三)hold命令
? 若在已存在圖形窗口中用plot命令繼續添加新的圖形內容,可使用圖形保持命令hold。發(fā)出命令hold on后,再執行plot命令,在保持原有圖形或曲線(xiàn)的基礎上,添加新繪制的圖形。
? 閱讀如下程序:
? x=linspace(0,2*pi,60);
? y=sin(x);
? z=cos(x);
? plot(x,y,'b'); 繪制正弦曲線(xiàn)
? hold on; 設置圖形保持狀態(tài)
? plot(x,z,'g'); 保持正弦曲線(xiàn)同時(shí)繪制余弦曲線(xiàn)
? axis ([0 2*pi -1 1]);
? legend('cos','sin');
? hold off 關(guān)閉圖形保持
? 三、 函數f(x)曲線(xiàn)
? fplot函數則可自適應地對函數進(jìn)行采樣,能更好地反應函數的變化規律。
? fplot函數格式:fplot(fname,lims,tol)
? 其中fname為函數名,以字符串形式出現,lims為變量取值范圍,tol為相對允許誤差,其其系統默認值為2e-3。
? 例:fplot(‘sin(x)’,[0 2*pi],’-+’)
? fplot(‘[sin(x),cos(x)]’,[0 2*pi],1e-3,’·’) 同時(shí)繪制正弦、余弦曲線(xiàn)
? 為繪制f(x)=cos(tan(πx))曲線(xiàn),可先建立函數文件fct.m,其內容為:
function y=fct(x)
y=cos(tan(pi*x));
用fplot函數調用fct.m函數,其命令為:
fplot(‘fct’,[0 1],1e-4)
特殊坐標圖形
? 一、 對數坐標圖形
? (一)loglog(x,y) 雙對數坐標
? 【例7】 繪制y=|1000sin(4x)|+1的雙對數坐標圖。程序為:
? x=[0:0.1:2*pi];
? y=abs(1000*sin(4*x))+1;
? loglog(x,y); 雙對數坐標繪圖命令
? (二)單對數坐標
? 以X軸為對數重新繪制上述曲線(xiàn),程序為:
x=[0:0.01:2*pi]
y=abs(1000*sin(4*x))+1
semilogx(x,y); 單對數X軸繪圖命令
? 同樣,可以以Y軸為對數重新繪制上述曲線(xiàn),程序為:
x=[0:0.01:2*pi]
y=abs(1000*sin(4*x))+1
semilogy(x,y); 單對數Y軸繪圖命令
? 二、 極坐標圖
函數polar(theta,rho)用來(lái)繪制極坐標圖,theta為極坐標角度,rho為極坐標半徑
? 【例8】 繪制sin(2*θ)*cos(2*θ)的極坐標圖,程序為:
theta=[0:0.01:2*pi];
rho=sin(2*theta).*cos(2*theta);
polar(theta,rho); 繪制極坐標圖命令
title('polar plot');
其它圖形函數
? 除plot等基本繪圖命令外,Matlab系統提供了許多其它特殊繪圖函數,這里舉一些代表性例子,更詳細的信息用戶(hù)可隨時(shí)查閱在線(xiàn)幫助,其對應的M-file文件存放在系統\matlab\toolbox\matlab目錄下。
其它圖形函數
? 一、階梯圖形
? 函數stairs(x,y)可以繪制階梯圖形,如下列程序段:
x=[-2.5:0.25:2.5];
y=exp(-x.*x);
stairs(x,y); 繪制階梯圖形命令
title('stairs plot');
其它圖形函數
? 二、條形圖形
? 函數bar(x,y)可以繪制條形圖形,如下列程序段將繪制條形圖形
x=[-2.5:0.25:2.5];
y=exp(-x.*x);
bar(x,y); 繪制條形圖命令
其它圖形函數
? 三、填充圖形
? fill(x,y,’c’)函數用來(lái)繪制并填充二維多邊圖形,x和y為二維多邊形頂點(diǎn)坐標向量。字符 ’c’ 規定填充顏色,其取值前已敘述。
? 下述程序段繪制一正方形并以黃色填充:
其它圖形函數
? x=[0 1 1 0 0]; 正方形頂點(diǎn)坐標向量
? y=[0 0 1 1 0];
? fill(x,y,'y');繪制并以黃色填充正方形圖
? 再如:
? x=[0:0.025:2*pi];
? y=sin(3*x);
? fill(x,y,[0.5 0.3 0.4]); 顏色向量
? Matlab系統可用向量表示顏色,通常稱(chēng)其為顏色向量?;绢伾蛄坑?/span>[r g b]表示,即RGB顏色組合;以RGB為基本色,通過(guò) r,g,b在0~1范圍內的不同取值可以組合出各種顏色。
二維繪圖函數小結
? plot 二維圖形基本函數
? fplot f(x)函數曲線(xiàn)繪制
? fill 填充二維多邊圖形
? polar 極坐標圖
? bar 條形圖
? loglog 雙對數坐標圖
? semilogx X軸為對數的坐標圖
? semilogy Y軸為對數的坐標圖
? stairs 階梯形圖
? axis 設置坐標軸
? clf 清除圖形窗口內容
? close 關(guān)閉圖形窗口
三維圖形
?一、 plot3函數
?最基本的三維圖形函數為plot3,它是將二維函數plot的有關(guān)功能擴展到三維空間,用來(lái)繪制三維圖形。
?函數格式:plot3(x1,y1,z1,c1,x2,y2,z2,c2,…)
?其中x1,y1,z1…表示三維坐標向量,c1,c2…表示線(xiàn)形或顏色。
?函數功能:以向量x,y,z為坐標,繪制三維曲線(xiàn)。
? 【例9】 繪制三維螺旋曲線(xiàn),其程序為:
? t=0:pi/50:10*pi;
? y1=sin(t),y2=cos(t);
? plot3(y1,y2,t);
? title('helix'),text(0,0,0,'origin');
? xlabel('sin(t)'),ylabel('cos(t)'),zlabel('t');
? grid;
? 二、mesh函數
? mesh函數用于繪制三維網(wǎng)格圖。在不需要繪制特別精細的三維曲面結構圖時(shí),可以通過(guò)繪制三維網(wǎng)格圖來(lái)表示三維曲面。三維曲面的網(wǎng)格圖最突出的優(yōu)點(diǎn)是:它較好地解決了實(shí)驗數據在三維空間的可視化問(wèn)題。
? 函數格式:mesh(x,y,z,c)
? 其中x,y控制X和Y軸坐標,矩陣z是由(x,y)求得Z軸坐標,(x,y,z)組成了三維空間的網(wǎng)格點(diǎn);c用于控制網(wǎng)格點(diǎn)顏色。
? 三、surf函數
? surf用于繪制三維曲面圖,各線(xiàn)條之間的補面用顏色填充。surf函數和mesh函數的調用格式一致。
? 函數格式: surf (x,y,z)
? 其中x,y控制X和Y軸坐標,矩陣z是由x,y求得的曲面上Z軸坐標。
? 四、視點(diǎn)
? 視點(diǎn)位置可由方位角和仰角表示。方位角又稱(chēng)旋轉角為視點(diǎn)位置在XY平面上的投影與X軸形成的角度,正值表示逆時(shí)針,負值表示順時(shí)針。仰角又稱(chēng)視角為XY平面的上仰或下俯角,正值表示視點(diǎn)在XY平面上方,負值表示視點(diǎn)在XY平面下方。從不同視點(diǎn)繪制三維圖形的函數為view。
? view(az,el)中的az為方位角,el為仰角。通過(guò)系統提供的多峰函數peaks的繪制例子,可進(jìn)一步說(shuō)明視點(diǎn)對圖形的影響,以及view(az,el)函數的使用。
? 【例12】 不同視角圖形
? p=peaks; 系統提供的多峰函數
? subplot(2,2,1);
? mesh(peaks,p);
? view(-37.5,30); 指定子圖1的視點(diǎn)
? title('azimuth=-37.5,elevation=30')
? subplot(2,2,2);
? mesh(peaks,p);
? view(-17,60); 指定子圖2的視點(diǎn)
? title('azimuth=-17,elevation=60')
? 五、等高線(xiàn)圖
? 等高線(xiàn)圖可通過(guò)函數contour3繪制。
? 【例13】 多峰函數peaks的等高線(xiàn)圖
? [x,y,z]=peaks(30);
? contour3(x,y,z,16);
? xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');
? title('contour3 of peaks')
圖形句柄
?一、句柄
?在Matlab系統中,繪圖命令產(chǎn)生的每一個(gè)部分稱(chēng)為圖形對象,系統在創(chuàng )建每一個(gè)對象時(shí),都為該對象分配唯一的一個(gè)值,稱(chēng)其為句柄,因此句柄就是圖形對象標識符。對象、句柄以及圖形對象等概念其實(shí)質(zhì)是統一的,系統將每一個(gè)對象按樹(shù)型層次結構組織起來(lái),這些對象包括根對象,通常為計算機屏幕、圖形窗口、坐標系統、線(xiàn)條、曲面、文本串、用戶(hù)界面控制等。
?根對象可包含一個(gè)或多個(gè)圖形窗口對象,而一個(gè)圖形窗口對象又可包含一組或多組坐標系子對象,線(xiàn)條、文本等其它對象都是坐標系的子對象。所有創(chuàng )建對象的函數當父對象不存在時(shí),都會(huì )自動(dòng)創(chuàng )建它。
?計算機屏幕作為根對象自動(dòng)建立,其句柄值為0。而Hf_f=figure命令則建立圖形窗口對象,并返回它的句柄值給變量Hf_f。圖形窗口的句柄為一整數,并顯示在該窗口的標題欄,其它圖形對象的句柄為浮點(diǎn)數,Matlab提供了一系列與句柄操作有關(guān)的函數,如gcf 、gca等。為便于識別,用大寫(xiě)字母開(kāi)頭的變量表示句柄,如Hf_f等。
? 二、對象屬性
? 所有圖形對象都具有控制對象顯示的屬性。這些屬性既包括對象的一般信息,如對象類(lèi)型、對象的父對象及子對象等,也包括對象的一些特定信息,如坐標系對象的刻度等。用戶(hù)可以獲取、設置對象屬性,以達到控制對象的目的。當創(chuàng )建一個(gè)對象時(shí),系統用一組默認屬性值定制對象,用戶(hù)梢醞üget命令獲取這些屬性值,同時(shí)也可通過(guò)set命令重新設置對象屬性。
? set命令格式為:
? set(H,’name’,value,…) 將圖形對象H的name屬性設置為value
? 其中H為句柄,name為屬性名,value為name的屬性值。
圖形句柄
? 用set命令可以方便地設置圖形對象屬性,如下列程序段就是通過(guò)屬性來(lái)定制圖形。
? x=[0:0.1:4*pi];
? H=plot(x,sin(x)); 返回正弦曲線(xiàn)句柄H
? set(H,'LineStyle','*','LineWidth',0.1);設置正弦曲線(xiàn)線(xiàn)型與線(xiàn)寬
? 其中'LineStyle'為線(xiàn)型屬性,'LineWidth'為線(xiàn)寬屬性。
圖形句柄
? 利用get(H)命令可以返回當前句柄H對象的屬性。
? 鍵入命令:get(H) 系統返回當前圖形對象的有關(guān)屬性:
? 象H=get(0,’CurrentFigure’)則返回根對象的’CurrentFigure’的屬性值,即當前圖形窗口的句柄,相當于函數gcf。get(gcf,’Children’)則返回當前坐標系對象的句柄;類(lèi)似的操作用戶(hù)可在使用Matlab的過(guò)程中不斷積累。
圖形句柄
? 三、句柄應用
? 利用句柄操作的有關(guān)函數,用戶(hù)可以查找、訪(fǎng)問(wèn)圖形對象,以達到定制對象屬性,改變對象顯示效果的目的。
? x=-pi:pi/20:pi;
? y=sin(x);z=cos(x);
? plot(x,y,'r',x,z,'g');
? Hl_lines=get(gca,'Children'); 獲取正、余曲線(xiàn)句柄向量Hl_lines
? for k=1:size(Hl_lines)
? if get(Hl_lines(k),‘Color’)==[0 1 0] [0 1 0]為綠顏色向 Hl_green=Hl_lines(k) 返回綠色線(xiàn)條句柄
? end
? end
動(dòng)畫(huà)設計
? 如果將Matlab產(chǎn)生的多幅圖形保存起來(lái),并利用系統提供的函數進(jìn)行播放,就可產(chǎn)生動(dòng)畫(huà)效果。系統所提供的動(dòng)畫(huà)功能函數有getframe、moviein和movie。
? getframe函數
? getframe函數可將當前圖形窗口作為一個(gè)畫(huà)面取下并保存,格式為:m=getframe它將每一幀畫(huà)面信息數據截取下來(lái)整理成列向量。該函數截取圖形的點(diǎn)陣信息,圖形窗口的大小,對數據向量的大小影響較大,窗口越大,所需存儲容量越大。而圖形的復雜性對數據容量要求沒(méi)有直接的關(guān)系。
動(dòng)畫(huà)設計
? moviein函數
? 函數m=moviein(n)用來(lái)建立一個(gè)足夠大的n列的矩陣m,用來(lái)保存n幅畫(huà)面的數據,以備播放。
? movie函數
? movie(m,n)以每秒n幅圖形的速度播放由矩陣m的列向量所組成的畫(huà)面。
動(dòng)畫(huà)設計
? 【例14】 播放一個(gè)不斷變化的眼球程序段。
? m=moviein(20); 建立一個(gè)20個(gè)列向量組成的矩陣
? for j=1:20
? plot(fft(eye(j+10))) 繪制出每一幅眼球圖并保存到m矩陣中
? m(:,j)=getframe;
? end
? movie(m,10);以每秒10幅的速度播放畫(huà)面
動(dòng)畫(huà)設計
? 再如下述程序段播放一個(gè)直徑不斷變化的球體。
? n=30
? [x,y,z]=sphere
? m=moviein(n);
? for j=1:n
? surf(i*x,i*y,i*z)
? m(:,j)=getframe;
? end
? movie(m,30);
習題
? 1.在[0 2π]范圍內繪制二維曲線(xiàn)圖
y=sin(x)*cos(5x)。
? 2.在[0 2π]范圍內繪制以Y軸為對數的二維曲線(xiàn)圖, y=|1000sin(4x)|+1
? 3. 在[–6 2]范圍內用plot和fplot函數分別繪制二維曲線(xiàn)圖。
? 4.繪制z=sin(x)*cos(y)的三維網(wǎng)格和三維曲面圖,x,y變化范圍均為 [0 2π]。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。