MATLAB應用介紹

台大生物機電系   馮丁樹教授


柒、繪圖指令

一、2D繪圖指令

(plot, subplot, semilogx, semilogy, loglog, grid, title, xlabel, ylabel )

繪圖指令plot(X,Y) 可以繪一個X 向量對應另一個Y向量。 X Y 為矩陣,則將以向量對矩陣之列或行繪製對應圖。指令plot(y) 會繪製Y行向量對應其指標。If Y 為複數,則 plot(y) 之指令等於plot(real(Y),imag(Y))。在其他繪圖之應用,通常虛數部份會被忽略。

plot(x1,y1,x2,y2)則是同一圖中要繪製兩條曲線時使用,當然使用 plot(X,Y),只要X,Y 分別為等大小之矩陣時亦可繪出多條曲線於同一圖中,但其線圖之型式須相同。在後來之指令中,若有多項,則可利用下述指令分別標出: plot(x1,y1,'*', x2,y2,'+'),則第一條曲線以”*”標示;第二條以”+”標示。 各種線形、點標及顏色等可用三個連續字串代表;如 plot(x,y,’go-‘)即表示繪出該線為綠色、圓點標及實線段。每一組線可有不同之代碼。

色碼

顏色

點標碼

點標

線碼

線名稱

y

黃色

.

-

實線

m

紫色magenta

o

圓點circle

:

虛線dotted

c

青色cyan

x

叉點x-mark

-.

點虛線dashdot

r

紅色red

+

加號plus

--

折線dashed

g

綠色green

*

星號star

 

 

b

藍色blue

s

方塊square

 

 

w

白色white

d

菱塊diamond

 

 

k

黑色black

v

三角形(向下)

 

 

 

 

^

三角形(向上)

 

 

 

 

<

三角形(向左)

 

 

 

 

>

三角形(向右)

 

 

 

 

p

五角形

 

 

 

 

h

六角形

 

 

                                  
plot(X,Y,'c+:')
繪製一條青色虛線並以’+’為資料標之線。
plot(X,Y,'bd')
則繪製一條藍色具菱形資料標但無連線之線圖。

    plot(X1,Y1,S1,X2,Y2,S2,X3,Y3,S3,...) 即是將好幾條線圖,分別以S1S2S3之字串變數規範其型式,繪製在同一圖上。其中X’sY’s分別為向量或矩陣陣,其大小須相對應。例如:

plot(X,Y,'y-',X,Y,'go') 即在同一圖上繪二次,一次以黃實線,另一次以綠圓點繪成。plot之繪圖指令若不指定顏色,則會以軸之顏色(LineStyleOrder)為準。以下之應用是以此一指令進行繪圖。讀者可依下列之指令將其存成一個檔plot1.m,然後以該指令進行。

  • [x]=0:0.1:10;

  • [y1]=1-exp(-0.5*x);

  • [y2]=exp(-0.5*x);

  • plot(x,y1,'g*',x,y2,'r+')

  • title('Y1 and Y2 versus X')

  • xlabel('X')

  • ylabel('Y1 (*) and Y2 (+)')

  • grid on

  •  

    要執行上面一群指令,可以將這些指令輸入編輯器,並以特定之名稱(例如plot1.m)存檔。執行後會如上圖所示。在此例中這兩條線均無連線,又包含了四個與圖面修飾有關的指令,即title, xlabel, ylabel grid,分別為圖標題、橫軸標題、縱軸標題及格線設定。

    二、併圖指令

    有些人喜歡將許多同性質的圖繪在同一點,那要怎麼辦呢?別忙,這裡有一個很好的指令:subplot(m,n,p) 或乾脆寫成 subplot(mnp),這個指令會將一個圖的位置以m x n之矩陣型式分為mn個小圖,而p為第幾個要畫的圖的位置。而p之順序則是由1排到mn個。例如

     

  • subplot(2,2,1), plot(fig1) %一個2x2的位置即四個圖中,先繪第1個小圖

  • subplot(2,2,2), plot(fig2) %一個2x2的位置即四個圖中,繪第2個小圖

  • subplot(2,2,3), plot(fig1) %一個2x2的位置即四個圖中,繪第3個小圖

  • subplot(2,2,4), plot(fig2) %一個2x2的位置即四個圖中,繪第4個小圖

  • 下面為繪製二小圖,一左一右,置於同一圖中的情形。

  •  [x1]=0:.1:10;

  • [y1]=1-exp(-0.5*sqrt(x1));

  • [y2]=exp(-0.5*sqrt(x1));

  • subplot(1,2,1),plot(x1,y1,'b')

  • grid on

  • xlabel('x1')

  • ylabel('y1')

  • title('y1 versus x1')

  • subplot(1,2,2),plot(x1,y2,'k:')

  • grid on

  • xlabel('x1')

  • ylabel('y22')

  • title('y2 vs x1')

  •