Matlab 教材:製圖--折線圖

根據數值來製圖,而不是根據美感或直覺來繪圖,通稱為測繪。 Matlab 提供幾種測繪的方法, 其中最常用的可能是製作折線圖的 plot( ) 函式。 它的基本使用形式是 plot(x,y),其中 x 和 y 是維度相同的序列或向量。 如果

x = [x1 x2 x3 ... xn]
y = [y1 y2 y3 ... yn]
plot(x,y) 的意思就是在平面坐標上, 因此,畫出來的是一個折線圖。例如
x=[0 1 2];
y=[0 1 0];
plot(x,y)
畫出從 (0,0) 到 (1,1) 到 (2,0) 的兩條折線。試試看。

然後,請先看看以下指令,先猜猜畫出來是什麼樣子,然後再試試看。

x=[0 1 2 0 2 0];
y=[0 2 0 1.3 1.3 0];
plot(x,y)

雖然折線圖是由直線段連接而成,但是只要線段個段數夠多,每一段夠短, 那麼人的眼睛很容易被欺瞞,而以為看到一幅平滑的曲線。 譬如以下我們用 300 段折線畫出 sin(x) 在 [-pi, pi] 區間內的折線圖。

x = linspace(-pi, pi, 301);
plot(x, sin(x));
請務必試試看,所得到的折線圖,看起來想必頗為平滑。

我們再度約略解釋上述兩個 Matlab 語句的意思。 第一句話產生了將 [-pi, pi] 區間等分成 300 段的 301 個節點:

x = [x1 x2 x3 ... x301]
其中 x1 = -pi 而 x301 = pi。 第二句話就畫出 因此就相當於在 y = sin(x) 的曲線上取出 301 個點,然後連接這些點而成的折線圖。

上例所製的圖,由 Matlab 自己決定呈現坐標的範圍。 在我的電腦上,Matlab 在橫軸 -4 與 4 之間、縱軸 -1 與 1 之間呈現圖形。 這未必符合我們的品味。如果想要自己設定坐標範圍, 可以用 axis( ) 函式。它的基本用法是 axis(v), 其中 v 是一個四維向量或序列:如果

v = [v1 v2 v3 v4]
則 axis(v) 的意思是,在橫軸 v1 與 v2 之間, 縱軸 v3 與 v4 之間,呈現圖形。 譬如,承上例,接著說
axis([ -pi pi -1.2 1.2 ])
試試看,是否覺得比較好看?

如果呈現的範圍設定錯了,可能完全看不到圖。 承上例,如果說

axis([ -pi pi -2 -1 ])
則完全看不到圖。

當我們製圖的時候,橫軸與縱軸的單位長未必一樣長。 例如,上例中,若定義 axis([ -pi pi -1.2 1.2 ]) 則橫軸有 2*pi (大約 6.28) 單位,但縱軸只有 2.4 單位。 如果要強迫橫軸與縱軸的單位長相同,下指令 axis('equal')。例如

clf;     這個指令的意思是清除圖片視窗 (clear figure)
plot(x, sin(x));     再製圖一次
axis('equal')
這樣,我們可以看到一張「比例正確」的正弦曲線圖。

現在再舉一個例子:畫單位圓。我們選擇使用圓的參數式:

(cos(t), sin(t)),   其中 t 介於 0 與 2*pi 之間
讓我們仍然以 300 個折線段來畫圓。做法是
t = linspace(0, 2*pi, 301);
plot(cos(t), sin(t));
axis( 1.2 * [-1 1 -1 1] );
但是,讀者想必看到一個橢圓。 為什麼呢,我們不是把橫軸和縱軸都定義在 [-1.2, 1.2] 這個區間嗎? 問題是,Matlab 為了視覺上的美感,將其圖片視窗設計成較為橫長的長方形。 因此,還是得說
axis('equal')
才會看到一個「圓」。

如果只給 plot( ) 一個參數,例如 plot(v) 而 v 是一個 n 維向量或序列。 則它的效果就相當於 plot((1:n), v)。 也就是說,Matlab 以 v 的元素足標作為它的橫軸坐標。試試看

v = [ 1 4 0 2 3 5];
plot(v)

習題

  1. 使用 300 個折線段, 畫出一個橫軸長為 2 縱軸長為 1 的橢圓,坐標軸的單位長需相等。
  2. 使用 300 個折線段, 畫出反正弦函數 (arcsin( )) 的曲線圖 (在它的定義域中)。 坐標軸的單位長需相等。
  3. 使用 300 個折線段, 畫出多項式 x3 + x2 + 2 在 [-2, 1] 內的曲線圖。 坐標軸的單位長不必相等。
  4. 使用 400 個折線段, 畫出三角多項式 cos(2*pi*x) + sin(40*pi*x)/10 在 [-1, 1] 內的曲線圖。 坐標軸的單位長需相等。
  5. 令 Tn(x) = cos(n*cos-1(x)), 用 300 個折線段,對 n = 1, 2, 3, 4, 畫出 Tn(x) 在 [-1, 1] 內的函數圖。
單維彰 (2001/10/03) --- 01/10/10 (單) [Prev] [Next] [Up]