5-8 u

我們可用 contour 指令來畫出「等高線圖」(Contour Plots),如下:

Example 1: 05-特殊圖形/contour01.mz = peaks; contour(z, 30); % 畫出 30 條等高線 %colormap(zeros(1,3)); % 以黑色呈現

其中 30 代表等高線的數目,contour 會自動找出 z 的最小值及最大值,並在此範圍中找出 30 個等分點,代表等高線的高度。若要畫出特定高度的等高線,可執行如下:

Example 2: 05-特殊圖形/contour02.mz = peaks; contour(z,[0 2 5]);

此時可畫出三條等高線圖,高度分別是 0、2、5。

Hint
如何畫出高度為 3 的等高線?解答:contour(z, [3, 3])。

欲標明等高線的高度,可用 clabel 指令,如下:

Example 3: 05-特殊圖形/contour03.mz = peaks; [c,handle] = contour(z, 10); clabel(c, handle);

clabel 只會標明夠長的等高線,以茲識別。若等高線太短,或是我們只要標明特定的等高線,則可以使用手動(Manual)的方式來加入等高線的高度,其指令為「clabel(c, handle, 'manual')」,此時圖形上的游標為十字形,只需在等高線上點一下,即可標明高度。(請立刻試試看!)

若欲在等高線之間填入顏色,可用 contourf 指令,如下:

Example 4: 05-特殊圖形/contour04.mz = peaks; contourf(z);

若要改變填滿的顏色,可用 caxis 指令,在此不再贅述。

若要使畫出的等高線對應至正確的 x 及 y 座標,則可執行如下:

Example 5: 05-特殊圖形/contour05.m[x,y,z] = peaks; contour(x, y, z); % 使用三個輸入 %colormap(zeros(1,3)); % 以黑色呈現

contourf 亦可接受 x、y、z 輸入引數。若要將等高線畫在曲面的正下方,可用 surfc 或 meshc 指令,如下:

Example 6: 05-特殊圖形/contour06.m[x, y, z] = peaks; meshc(x, y, z); axis tight

若要畫出三度空間中的等高線,可用 contour3 指令,如下:

Example 7: 05-特殊圖形/contour301.m[x, y, z] = peaks; contour3(x, y, z, 30); axis tight

使用 contour 指令亦可畫出極座標中的等高線,但過程較為複雜,以下列複數函數為例: $$ f(z)=|z^3-1| $$

其中 z 代表複數平面中的任一點複數,如果我們要畫出此函數的等高線,可見下列範例:

Example 8: 05-特殊圖形/contour07.mt = linspace(0, 2*pi, 61); % 角度的格子點 r = 0:0.05:1; % 長度的格子點 [tt, rr] = meshgrid(t, r); % 產生二維的格子點 [xx, yy] = pol2cart(tt, rr); % 將極座標轉換至直角座標 zz = xx + sqrt(-1)*yy; % 複數表示,亦可寫成 zz=rr.*exp(sqrt(-1)*tt); ff = abs(zz.^3-1); % 曲面的函數 contour(xx, yy, ff, 50); % 畫出等高線 axis image

在上例中,座標的標示仍為直角座標。欲將等高線顯示於極座標上,需先用 polar 指令產生一個極座標圖,再移除圖形,留下圖軸,然後再進行作圖,例如:

Example 9: 05-特殊圖形/contour08.mt = linspace(0, 2*pi, 61); % 角度的格子點 r = 0:0.05:1; % 長度的格子點 [tt, rr] = meshgrid(t, r); % 產生二維的格子點 [xx, yy] = pol2cart(tt, rr); % 將極座標轉換至直角座標 zz = xx + sqrt(-1)*yy; % 複數表示,亦可寫成 zz=rr.*exp(sqrt(-1)*tt); ff = abs(zz.^3-1); % 曲面的函數 h = polar([0 0], [0 1]); % 產生在極座標上的一條直線 delete(h); % 移除上述圖形,但留下極座標圖軸 hold on contour(xx, yy, ff, 50); % 畫出等高線 hold off

我們也可以同時畫出複數函數的曲面和等高線圖,例如,下列範例可以畫出複數函數:若要畫出下列函數圖:可見下列範例:

Example 10: 05-特殊圖形/contour09.mt = linspace(0, 2*pi, 61); % 角度的格子點 r = 0:0.05:1; % 長度的格子點 [tt, rr] = meshgrid(t, r); % 產生二維的格子點 zz=rr.*exp(sqrt(-1)*tt); % 複數表示 xx=real(zz); yy=imag(zz); ff = abs(zz.^3-1); % 曲面的函數值 h = polar([0 0], [0 1]); % 產生在極座標上的一條直線 delete(h); % 移除上述圖形,但留下極座標圖軸 hold on contour(xx, yy, ff, 20); % 等高線 surf(xx, yy, ff); % 曲面圖 hold off view(-19, 22); % 設定觀測角度

從上圖可以很明顯地看到,這個函數共有三個零點落於單位圓上面,角度分別是 0、120、240 度。

有關本章的相關指令,可以列表如下:

指令說明
bar, barh, bar3, bar3h 長條圖
area 面積圖
pie, pie3 扇形圖
stem, stem3 針頭圖
stairs 階梯圖
fill, fill3 實心圖
quiver, quiver3 向量場圖
contour, contourf, contour3 等高線圖

Hint
在上表很容易看出,若某一繪圖指令之後加上“3”(例如:bar3),通常表示是相關的 3D 繪圖指令。


MATLAB程式設計:入門篇