二維平面繪圖 Matlab 的基本繪圖函數 plot 編修函數的圖形 fplot 與 ezplot 函數利用 Property editor 來編修圖形 1
基本繪圖函數基本的二維繪圖函數 在 Matlab 裡, 最常使用的二維繪圖函數是 plot 函數 : 表 4.1.1 plot 函數的使用 函數 說明 plot(x,y) 以 x 為資料點的橫座標所組成的向量,y 為縱座標所組成的向量, 描點繪出 (x,y) 的曲線圖 plot(y) x 的間距為 1, 描點繪出 (x,y) 的曲線圖 2
下圖是由資料點擷取出橫座標與縱座標的示意圖 : 3
二維圖形的編修 利用下面的語法可編修二維函數的圖形 : 表 4.1.2 修飾 plot 函數所繪出的圖形 函數 plot(x,y,'str') 說明 以字串 str 所指定的格式繪出二維圖形 plot(x 1,y 1,'str 1 ', x 2,y 2,'str 2 ', ) 以字串 str 1 所指定的格式繪出 ( x1, y 1) 的圖形, 以 str 2 所指定的格式繪出 ( x2, y 2) 的圖形, 以此類推 plot(x 1,y 1,'str', 'p_str',property, ) 根據繪圖性質 p_str 來繪圖, 其中 p_str 可為 : LineWidth 設定線條寬度 MarkerFaceColor 設定標記的顏色 MarkerEdgeColor 設定標記的邊框顏色 MarkerSize 設定標記的大小 4
下表列出了字串 str 可使用的控制碼, 以及它們所代表的意義 : 表 4.1.3 plot 函數的控制碼 ( 一 ), 控制資料點的顯示符號 符號 說明 符號 說明. 繪點 ^ 繪出 ^ 符號 * 繪出星號 v 繪出 v 符號( 小寫 v) o 繪出小圓 ( 小寫字母 o) s 或 square 繪出正方形 + 繪出加號 d 或 diamond 繪出菱形 x 繪出打叉符號 ( 小寫字母 x) p 或 pentagram 繪出五角形 < 繪出 < 符號 h 或 hexagram 繪出六角形 > 繪出 > 符號 none 不繪出任何形狀 ( 預設 ) 5
表 4.1.4 plot 函數的控制碼 ( 二 ), 控制線條樣式 線條樣式 說明 線條樣式 說明 -( 減號 ) 實線 ( 預設 ) : 由點連成的線段 -- 虛線 none 不繪出線段 -. 虛線和點連成的線段 表 4.1.5 plot 函數的控制碼 ( 三 ), 控制線條顏色 線條顏色 說明 線條顏色 說明 g 綠色 (green) w 白色 (white) m 紫色 (magmata) r 紅色 (red) b 藍色 (blue)( 預設 ) k 黑色 (black) c 青藍色 (cyan) y 黃色 (yellow) 6
簡單的範例 : >> x=linspace(1,8,36); >> y1=sin(2*x)./x; >> plot(x,y1,'-sb') 自 1 到 8 取 36 點形成 36 行的向量陣列 每一點 x 值 *2 取 sin 函數後除以原值即向量元素相除若沒有. 則表示向量投影長度即 a/b=dot(a,b)/dot(b,b) 7
繪圖區域的控制更改繪圖的範圍與顯示方式 如果想自行設定函數圖形顯示的範圍時, 則可利用 axis 函數 : 表 4.2.1 設定繪圖的範圍 函數 axis([xmin,xmax,ymin,ymax]) 說明 指定繪圖的範圍,x 方向從 xmin 到 xmax,y 方向從 ymin 到 ymax 8
>> x=linspace(0,10,64); >> y=x.*cos(4*x)./12; >> plot(x,y,'-ro') >> axis([0,6,-0.6,0.6]) 9
利用 box 和 grid 指令可設定設定格線與外框 : 表 4.2.2 設定是否顯示圖形的格線與外框 指令 grid box 說明 設定是否顯示格線, 設定 on 為顯示, 設定 off 則不顯示 設定是否顯示圖形的外框, 設定 on 顯示, 設定 off 不顯示 >> grid on 10
修改 x 與 y 軸的顯示比例 設定座標軸顯示的比例所用的指令 : 表 4.2.3 設定座標軸顯示的比例 指令 axis normal 說明 使用 Matlab 預設的寬高比, 且拉動視窗即可調整其比例 axis square 圖形輸出的寬與高比例為 1:1 axis equal 圖形座標軸的比例為 1:1 axis tight 圖形的繪圖區域緊貼著視窗 11
>> axis square >> axis equal >> axis equal tight 12
於已存在的圖中加入新圖 利用 h old on 可將新繪的圖形附加於原有圖形之上 : 表 4.2.4 設定圖形產生的方式 指令 hold 說明 設定 hold 為 on 時, 則新產生的圖形會疊加在原有圖形的上面, 若是設定 off, 則原有的圖形會被新產生的圖形覆蓋掉 >> plot(x,y1,'-rs') >> hold on >> plot(x,y2,'-bo') 13
建立一個新的繪圖視窗來繪圖 figure 指令可另起一個新的視窗來容納新的圖形 : 表 4.2.5 設定圖形產生的方式 指令 figure figure(n) 說明建立一個新的繪圖視窗, 視窗的標題為 Matlab 自動設定建立一個新的繪圖視窗, 視窗的標題為 Figure n 若 Figure n 為已經存在的視窗, 則 figure(n) 會把此視窗變成作用中視窗 14
將數張圖合併成一張大圖 利用 subplot 可在一個繪圖視窗內呈現數張小圖 : 表 4.2.6 subplot 函數的用法 函數 說明 subplot(m,n,p) 把繪圖視窗分成 m n 個區域, 並在第 p 個位置建立一個子繪圖區 位置 p 的計算方式是由左而右, 由上而下來排列 subplot(m,n,p,'replace') 於第 p 個位置建立一個子繪圖區, 若此繪圖區內已有其它圖形存在, 則新繪的圖會取代掉原有的圖 15
於圖形內加入文字 下表面的函數可設定圖形的標題文字, 以及每一個繪圖軸的解說文字 : 表 4.3.1 於圖形內加入文字 函數 title('text') xlabel('text') ylabel('text') zlabel('text') 說明設定圖形的標題文字為 text 設定 x 軸的解說文字為 text 設定 y 軸的解說文字為 text 設定 z 軸的解說文字為 text 16
>> title('plot of sin(x^2)') >> xlabel('time');ylabel('value'); 17
下面的函數可在圖形內加入註解 : 表 4.3.2 加入圖形的註解 函數 legend(str 1,str 2,...) 說明 設定圖例標記的字串 legend(str 1,str 2,...,pos) 設定圖例標記的位置,1 代表將圖例放在右上角,2 是左上角,3 是左下角,4 則是放在右下角 legend off text(x,y,'text') gtext('text') 清除圖例標記 在圖形中位置為 (x,y) 之處加入註解文字 利用滑鼠來設定文字輸入的位置 18
>> legend('x*cos(x)','x*sin(x)',2) >> text(2,2.5,'x*sin(x)'); text(5.5,3,'x*cos(x)') 19
更簡潔的繪圖函數 fplot 函數只要給予一個函數字串即可繪圖 fplot 可依據圖形陡峭的程度, 自動調整樣點數的多寡以繪出平滑的曲線 表 4.4.1 繪圖函數 fplot 的用法 函數 fplot('f_str',[xmin,xmax]) fplot('f_str',[xmin,xmax,ymin,ymax]) 說明繪出函數 f_str 的圖形,x 軸的範圍取 xmin 到 xmax 繪出函數 f_str 的圖形,x 軸的範圍取 xmin 到 xmax,y 軸的範圍取 ymin 到 ymax 20
>> fplot('x-cos(x^3)-sin(2*x^2)',[-3,3]) 21
ezplot 可繪出隱函數圖, 以及參數繪圖等 : 表 4.4.2 繪圖函數 ezplot 的用法 函數說明 ezplot('f_str',[xmin,xmax]) 繪出函數 f_str 的圖形, 繪圖範圍在 x 與 y 方向 均取 xmin 到 xmax ezplot('f_str',[xmin,xmax,ymin,ymax]) 繪出函數 f_str 的圖形, 繪圖範圍在 x 方向取 xmin 到 xmax 在 y 方向均取 ymin 到 ymax ezplot('fx','fy',[tmin,tmax]) 參數繪圖, 繪出 ( fx( t), fyt ( )),t 從取 tmin 到 tma 的參數圖 22
>> ezplot('x^3+4*x^2-3*x+1-y^2') >> ezplot('x^2*sin(x^2)/exp(x)',[0,10,-0.7,0.7]) 23
利用 Property Editor 來編修圖形 利用 Property Editor 對話方塊可編修圖形的性質 : 24
三維空間繪圖 學習三維繪圖的基本技巧學習 peaks 函數的用法學習二維與三維等高線圖的繪製學習三維圖形的編修 25
基本三維繪圖 對於函數而言, 每給一組 f(x,y), 便能求得其相對應的高度 z, 如下圖所示 : z 座標 = ( x, yz, ) z f( x, y) ( x, yz, ) f ( xy, ) y ( xy, ) x 26
繪製三維的網格圖 利用 mesh 函數可繪製三維的網格圖 : 表 5.1.1 mesh 函數的使用 函數 mesh(x,y,z) mesh(z) 說明 繪出三維的網格圖 繪出 x 座標從 1 到 m,y 座標從 1 到 n 的三維的網格圖 27
28
>> xx=[2 3 4;2 3 4;2 3 4;2 3 4]; >> yy=[0 0 0;1 1 1;2 2 2;3 3 3] >> zz=[7 7 6;7 7 7;8 8 9;8 8 9] >> mesh(xx,yy,zz) 29
Matlab 提供了 meshgrid 函數, 可以建立 xx 與 yy 矩陣 : 表 5.1.2 meshgrid 函數的使用 函數 meshgrid(vx,vy) 說明 建構出兩個二維矩陣 xx 與 yy, 以供三維繪圖所需 >> x=linspace(-2,2,30); >> y=linspace(-2,2,30); >> [xx,yy]=meshgrid(x,y); >> zz=xx.*exp(-xx.^2-yy.^2); >> mesh(xx,yy,zz) 30
下面是 meshc 函數與 waterfall 函數用法 : 表 5.1.3 meshc 與 waterfall 函數的使用 函數 meshc(xx, yy,zz) waterfall(xx,yy,zz) 說明 繪出網格圖, 但在網格圖下方會附帶繪出等高線圖 以切片的方式來繪製三維的立體圖 >> meshc(xx,yy,zz) >> waterfall(xx,yy,zz) 31
繪製三維的曲面圖 想要對網格面上色, 可利用 surf 或其它相關的函數 : 表 5.1.4 surf 與 surfc 函數的使用 函數 surf(xx,yy,zz) surfc(xx,yy,zz) 說明 繪出三維的曲面圖 同 surf, 但在圖形下方會顯示出函數圖形的等高線圖 >> surf(xx,yy,zz); >> surfc(xx,yy,zz);axis tight; 32
簡易的三維繪圖函數 ezmesh 與 ezsurf 函數可以快速的繪出三維的圖形 : 表 5.2.1 簡易三維繪圖函數的使用 函數 說明 ezmesh(f,[xmin, xmax, ymin, ymax]) 根據函數 f 以 60 60 個網格數繪出 f 的三維圖形 ezmeshc(f,[ xmin, xmax, ymin, ymax]) ezsurf(f,[ xmin, xmax, ymin, ymax]) ezsurfc(f,[ xmin, xmax, ymin, ymax]) 同 ezmesh, 但在圖形下方會顯示出圖形的等高線 同 ezmesh, 但是網格面會上色 同 ezsurf, 但在圖形下方會顯示出圖形的等高線 33
>> ezmesh('exp(-0.2*x)*cos(t)') >> ezsurfc('y/(x^2+y^2+1)',36) 34
內建的三維圖形展示函數 peaks peaks 所描述的數學函數, 其定義式為 x 1 f( x, y) 3(1 x) e 10 x y e e 5 3 2 2 2 2 2 2 2 x ( y 1) 3 5 x y ( x 1) y 表 5.3.1 使用 peaks 函數 函數 說明 peaks 以 49 49 個資料點繪製數學函數 peaks, 範圍 x 與 y 方向同為 3~3 peaks(n) 同 peaks, 但以 n n zz=peaks 計算 49 49 zz=peaks(n) 以 n n [xx,yy,zz]=peaks(n) 以 n n 個資料點來繪圖 個數學函數 peaks 的值 個資料點計算數學函數 peaks 的值 個資料點計算數學函數 peaks 的值 35
>> peaks(24); >> [xx,yy,zz]=peaks(32); >> surfc(xx,yy,zz); 36
空間曲線繪圖 plot3 函數可用來繪製空間的曲線 : 表 5.4.1 空間曲線繪圖函數 函數 plot3(x,y,z) plot3(x,y,z,'str') 說明 以向量 x,y 與 z 繪製三維空間曲線 以控制字串 str 所指定的格式繪出三維空間曲線 >> plot3(t.*sin(t),t.*cos(t),t); 37
等高線繪圖二維等高線圖 Matlab 的 contour 函數可用來繪製二維的等高線圖 : 表 5.5.1 二維等高線繪圖函數 函數 contour(xx,yy,zz,n) contour(zz,n) contour(xx,yy,zz,[z 1,z 2,z 3,...]) contourf(xx,yy,zz,n) 說明分別以矩陣 xx yy 與 zz 繪出 n 條等高線同上, 但 x 方向是從 1 到 m,y 方向是從 1 到 n 繪出高度為 z 1,z 2,z 3,... 的等高線圖同 contour 函數, 但會以顏色填滿 (fill) 等高線圖 38
>> contour(xx,yy,zz) >> contourf(xx,yy,zz,20) 39
要標註等高線的值 : 把繪出的等高線圖設給某一個變數 把這個變數傳遞給 clabel 函數 表 5.5.2 將等高線加入高度標記的函數 函數 clabel(cmat) clabel(cmat,[z 1,z 2,z 3,...]) clabel(cmat,'manual') 說明在等高線圖內加上高度的標記在高度為 [z 1,z 2,z 3,...] 的等高線上加上高度標記利用滑鼠標註等高線的數值 40
>> cmat=contour(xx,yy,zz); >> clabel(cmat) 41
三維的等高線圖 contour3 函數可繪製三維的等高線圖 : 表 5.5.3 三維等高線繪圖函數 函數 contour3(xx,yy,zz,n) contour3(zz,n) contour3(xx,yy,zz,[z 1,z 2,z 3,...]) 說明分別以矩陣 xx yy 與 zz 繪出 n 條三維的等高線同上, 但 x 方向從 1 到 m,y 方向從 1 到 n 指定繪出高度為 z 1,z 2,z 3,... 的三維等高線圖 >> zz=peaks; >> contour3(zz); 42
編修三維繪圖三維圖形的基本編修 下表列出了三維圖形常用的編修指令 : 表 5.6.1 三維繪圖的基本編修指令 指令 hidden on/off axis on/off box on/off hold on/off grid on/off 說明預設為 on 設定 off 則會除去隱藏線, 但這個指令只對 mesh 等函數所繪出的網格圖形有效預設為 on 設定 off 則不顯示座標軸與刻度預設為 off 設定 on 則在圖形的外圍顯示一個外框預設為 off 設定 on 時, 則新產生的圖形不會覆蓋掉原有的圖形設定 on 則顯示座標的網格線 43
>> hidden off; >> box on; 44
改變三維圖形的視角 如果想更改圖形的觀測角度, 可用利用 view 函數 : 表 5.6.2 改變三維圖形的視角 函數 view(az,el) [az,el]=view 說明 設定圖形的視角, 單位為度 傳回目前所使用的視角 z 觀測點 =view( 方位角, 仰角 ) 仰角 y 方位角 x 45
>> peaks; >> view(60,30); 46
按下工具列上的 Rotate 3D 鈕, 可利用滑鼠旋轉所繪製的圖形 1 按下 Rotate 3D 按鈕 2 利用滑鼠拖曳來旋轉圖形 47
修改三維圖形的曲面顏色 Matlab 是利用 color map, 依所繪製之函數值的大小來對曲面上色 48
colormap 可限定三維的圖形使用特定的顏色對應表 下表列出了 colormap 與 colorbar 函數的用法 : 表 5.6.4 colormap 函數的使用 函數 colormap(map) colormap('default') map=colormap colorbar 說明使用 map 當成目前配色的顏色對應表使用預設的顏色對應表把目前的顏色對應表設定給變數 map 在目前的圖形中顯示顏色對應圖 49
下表列出了 Matlab 常用來建立顏色對應表的函數 表 5.6.5 產生顏色對應表的函數 函數 說明 hsv(m) 建立一個 m 3 的顏色對應矩陣, 色系是由紅 橙 黃 綠 藍 靛 紫等循環色彩所組成 jet(m) 建立一個 m 3 的顏色對應矩陣, 色系是暗紅 紅 橙 黃 綠 藍 靛 紫與暗藍等色彩所組成 (Matlab 預設的顏色對應表 ) spring(m) 建立一個 m 3 的春天色系矩陣, 它是由粉紅與黃色色系所組成 summer(m) 建立一個 m 3 的夏天色系矩陣, 它是由綠色與黃色色系所組成 autumn(m) 建立一個 m 3 的秋天色系矩陣, 它是由黃色與紅色色系所組成 winter(m) 建立一個 m 3 的冬天色系矩陣, 它是由藍色與綠色色系所組成 hot(m) 建立一個 m 3 的暖色系矩陣, 由黑 紅 黃 白等顏色所組成 cool(m) 建立一個 m 3 的冷色系矩陣, 由青色和暗紅色等顏色所組成 gray(m) 建立一個 m 3 的灰階色系矩陣 50
>> colormap(hot(32));colorbar; >> colormap('default');colorbar; 51
利用 Property Editor 視窗修改圖形 52
特殊圖形的繪製 學習極座標繪圖與對數繪圖學習雙 y 軸繪圖學習向量場繪圖學習統計繪圖在 Matlab 的環境裡製作動畫 53
常用的二維繪圖函數極座標繪圖 極座標函數可以寫成 r f( ) Matlab 的 polar 函數來繪製極座標圖 表 6.1.1 polar 函數的使用 函數 polar(theta,r) polar(theta,r,'str') 說明 根據角度向量 theta, 以及距原點的長度 r 繪製極座標圖 依據格式字串 str 所指定的格式繪製極座標圖 54
>> t=linspace(0.01,4*pi,100); >> r=log(t); >> polar(t,r) 55
對數繪圖 下表所列的函數可繪製對數座標圖形 : 表 6.1.2 對數繪圖函數的使用 函數 semilogx(x,y) semilogy(x,y) loglog(x,y) 說明 x 軸為對數座標, 繪出 x-y 的對數圖 y 軸為對數座標, 繪出 x-y 的對數圖 x 軸與 y 軸皆為對數座標, 繪出 x-y 的對數圖 >> x=linspace(0,100,600); >> semilogx(x,sin(x)./(x+1)) 56
雙 y 軸繪圖 利用雙 y 軸繪圖可繪製兩個函數於同一張圖 : 表 6.1.3 plotyy 函數的使用 函數 plotyy(x 1,y 1,x 2,y 2 ) 說明 以圖形左邊的刻度當成 x 1 -y 1 資料點的 y 軸, 以圖形右邊的刻度當成 x 2 -y 2 資料點的 y 軸, 繪出雙 y 軸圖 >> x=linspace(0,6,50); >> plotyy(x,sqrt(x)+sin(6*x),x,exp(x)) 57
向量場與法向量繪圖梯度向量場的繪製 要繪出梯度向量場以 gradient 函數計算再以 quiver 函數繪出圖形 表 6.2.1 gradient 與 quiver 函數的語法 函數 [fx,fy]=gradient(zz) [fx,fy]=gradient(zz,dx,dy) quiver(xx,yy,fx,fy) 說明依矩陣 zz 計算出每一個資料點的梯度同上, 但 x 軸方向的間距是 dx,y 軸方向的間距是 dy 在座標為 xx 與 yy 的點上繪出一個箭號 58
>> [xx,yy]=meshgrid(-2:0.2:2,-2:0.2:2); >> zz=sin(xx).*cos(yy); >> [u,v]=gradient(zz); >> quiver(xx,yy,u,v) 59
三維法向量的繪圖 要繪製曲面的法向量, 可利用 surfnorm 與 quiver3 函數 : 表 6.2.3 quiver3 的用法與三維的法向量繪圖 函數 surfnorm(xx,yy,zz) quiver3(xx,yy,zz,fx,fy,fz) quiver3(fx,fy,fz) 說明利用 xx,yy 與 zz 所描述的曲面計算其法向量同 quiver, 但是繪出三維的向量場同上, 但是箭號的間格大小相等 >> [u,v,w]=surfnorm(xx,yy,zz); >> quiver3(xx,yy,zz,u,v,w,0.4); 60
統計繪圖長條圖 Matlab 提供了 bar 與 bar3 函數, 可用來繪製二維與三維的長條圖 : 表 6.3.1 長條圖繪圖函數 函數 bar(y) bar(x,y) 說明 依 y 的值來繪製長條圖 指定向量 x 的元素值為座標軸的標記來繪圖 bar(x,y,width) 指定長條圖裡長方形的寬度, 預設值為 0.8 bar(x,y,'stacked') 將同一群組的長條圖疊加起來繪圖 61
>> bar([1 4 3 7 2 6]) >> A=[1 2 3 6;2 4 1 3;8 6 1 4] >> bar(a) 62
bar3 可用來繪製三維的圖形 : 表 6.3.2 立體的長條圖繪圖函數 函數 bar3(zz) bar3(y,zz) 說明 同 bar 函數, 但是繪出三維的長條圖 同上, 其中向量 y 可用來指定三維圖中 y 方向的刻度 >> A=[1 2 3 6;2 4 1 3;8 6 1 4] >> bar3(a);ylabel('y-axis') 63
圓形圖 pie 與 pie3 函數, 可分別繪製二維與三維的圓形圖 : 表 6.3.3 圓形圖繪圖 函數 pie(x,explode) pie3(x,explode) 說明依向量 x 繪出圓形圖, 並依向量 explode 決定該塊區域是否要和圓形圖分開同 pie 指令, 但是以三維的方式來呈現 >> pie([4 6 3 1],[0 0 0 1]) 64
直方圖 直方圖 (histogram) 是以組別為橫軸, 次數或度為縱軸所繪出的統計圖 : 表 6.3.4 直方圖繪圖函數 hist 函數 v=hist(data) v=hist(data,n) 說明將向量 data 按數據大小分成 10 個等距的區間, 然後將這 10 個區間內元素的個數傳回給向量 v 同上, 但區間數為 n 65
>> data=[0 3 3 4 5 3 7 4 2 8 2 8 10]; >> hist(data) 66
動畫的製作 comet 函數在繪製動態圖形時, 會拖了一條長長的尾巴, 因而得名 表 6.4.1 使用 comet 函數 函數 comet(x,y,p) comet3(x,y,z, p) 說明 繪出彗星軌跡圖, 彗星尾巴拖的長度為 p*length(y) 同上, 但繪出三維的彗星軌跡圖 >> comet3(sin(t/2).*cos(6*t),sin(t/2).*sin(6*t),t) 67