3-5 L繪洢O

MATLAB 還有其他各種二維繪圖指令,以適合不同的應用,相關指令可列表如下:

指令說明
errorbar 在曲線加上誤差範圍
fplot、ezplot 較精確的函數圖形
polar、ezpolar 極座標圖形
hist 直角座標質方圖(累計圖)
rose 極座標質方圖(累計圖)
compass 羅盤圖
feather 羽毛圖
area 面積圖(第五章「特殊圖形」介紹)
stairs 階梯圖(第五章「特殊圖形」介紹)

上列的指令,只能用於二維繪圖,故將在本章介紹。還有一些較特殊的繪圖指令(可同時用於二維及三維繪圖),例如:長條圖、扇形圖、等高線圖、向量場圖等,以及面積圖、階梯圖(只能用於二維繪圖),由於他們性質類似於第五章「特殊圖形」的繪圖指令,故將併入該章再一起介紹。以下我們針對前述列表的指令舉例說明之。

如果已知資料的誤差範圍,就可用 errorbar 來表示。下例以 y 座標高度的 20% 作為做資料的誤差範圍:

Example 1: 03-二維平面繪圖/plotxy17.mx = linspace(0,2*pi,30); % 在 0 到 2π 間,等分取 30 個點 y = sin(x); e = y*0.2; errorbar(x,y,e) % 圖形上加上誤差範圍 e

對於變化劇烈的函數,可用 fplot 指令來進行較精確的取點作圖,此指令會對劇烈變化處進行較密集的取樣,例如:

Example 2: 03-二維平面繪圖/plotxy18.mfplot('sin(1/x)', [0.02 0.2]); % [0.02 0.2]是繪圖範圍

有關 fplot 指令的詳細說明,可見本書姊妹作「MATLAB 程式設計:進階篇」 第八章第二 節「數學函數的作圖」。

若要產生極座標圖形,可用 polar 指令:

Example 3: 03-二維平面繪圖/plotxy19.mtheta = linspace(0, 2*pi); r = cos(4*theta); polar(theta, r); % 進行極座標繪圖

對於大量的資料,可用 hist 指令來繪製統計上常用的「質方圖」(Histogram),以顯示資料的分佈情況和統計特性。hist 指令可將資料依大小分成數堆,並將每堆的個數畫出。例如,欲將 10000 個由 randn 產生的正規分佈之亂數分成 25 堆,可進行如下:

Example 4: 03-二維平面繪圖/plotxy20.mx = randn(10000, 1); % 產生 10000 個正規分佈亂數 hist(x, 25); % 繪出直方圖,顯示 x 資料的分佈情況和統計特性, % 數字 25 代表資料依大小分堆的堆數,即是直方圖內長條的個數

由上圖可看出,質方圖可逼近這些亂數的機率分佈函數,而且當資料量越大時,逼近程度越高。(上例 set 指令將長條圖的邊緣設定成白色,詳細使用語法請參考本書第七章「握把式圖形及 GUI 設計」)

rose 和 hist 指令很接近,只不過是將資料大小視為角度,資料個數視為距離,並用極座標繪製表示。其產生圖形類似玫瑰花瓣,故以「rose」名之。舉例如下:

Example 5: 03-二維平面繪圖/plotxy21.mx = randn(5000, 1); rose(x); % x 資料大小為角度,x 資料個數為距離, % 進行繪製類似玫瑰花瓣的極座標質方圖

使用 compass 指令,可畫出一組以原點為起始點的向量圖,稱為「羅盤圖」,例如:

Example 6: 03-二維平面繪圖/plotxy22.mtheta = linspace(0, 2*pi, 50); rho = sin(0.5*theta); [x, y] = pol2cart(theta, rho); % 由極座標轉換至直角座標 compass(x, y); % 畫出以原點為向量起始點的羅盤圖

若只有一個引數輸入 z,則 compass 會將 z 的實部(即 real(z))做為 x 座標,將 z 的虛部(即 imag(z))做為 y 座標,再進行作圖。換句話說,compass(z) 即等效於 compass(real(z),imag(z))。因此上述四列程式碼可簡化為下列兩行:(為什麼?)

Example 7: 03-二維平面繪圖/plotxy23.mclear j theta = linspace(0, 2*pi, 50); compass(sin(0.5*theta).*exp(j*theta));

「羽毛圖」和「羅盤圖」很類似,唯一的差別是:羅盤圖的起始點為原點,而羽毛圖的起始點則是 (k, 0),k = 1~n ,其中 n 是向量個數。欲畫羽毛圖,可用 feather 指令,如下:

Example 8: 03-二維平面繪圖/plotxy24.mtheta = linspace(0, 4*pi, 30); rho = 10; [x, y] = pol2cart(theta, rho); % 由極座標轉換至直角座標 feather(x, y); % 繪製羽毛圖 axis image

與 compass 指令一樣,feather(z) 等於 feather(real(z),imag(z))。


MATLAB程式設計:入門篇