1. 程式人生 > >MATLAB繪圖

MATLAB繪圖

強大的繪圖功能是MATLAB的特點之一。MATLAB可以給出資料的二維、三維乃至四維的圖形表現,MATLAB提供了兩個層次的繪圖操作:一種是對圖形控制代碼進行的低層圖形命令,另一種是建立在低層繪圖操作之上的高層繪圖操作。高層繪圖操作簡單明瞭、方便高效,是使用者最常用的繪圖方法,而低層繪圖操作和表現能力更強,為使用者更加自主地繪製圖形創造了條件。本節只介紹繪製二維和三維圖形的高層繪圖函式。

一、 二維圖形

1. 繪製二維曲線的最基本函式

MATLAB中,最基本且應用最廣泛的繪圖函式為plot函式,利用它可以在二維平面上繪製出不同的曲線。

1.1 plot函式的基本用法

plot函式用於繪製x --- y平面上的線性座標曲線圖,因此需要一組x座標以及與各個x對應 的y座標。plot函式的基本呼叫格式為:

      plot(x,y)

其中x和y為長度相同的向量,分別用於儲存x座標和y座標資料。

1  在區間0≤x≤2π內,繪製曲線.

程式如下:

      x=0:pi/100:2*pi;

      y=2*exp(-0.5*x).*sin(2*pi*x);

plot(x,y)

執行程式後,開啟一個圖形視窗,其中繪出了所要求的曲線,如圖1。

1

注意:求y時,指數和正弦函式之間要用點乘運算,而因2為標量,所以2與指數函式之間可以用乘法運算。這樣,x和y所包含的元素個數相等,y(i)是x(i)點的函式值。

上面所提到的plot函式的自變數x,y為長度相同的向量,這是最基本的情況,實際應用中還有其他一些變化:

(1)當x,y是同維矩陣時, 則以x,y對應列元素為橫、縱座標分別繪製曲線,曲線條數等於矩陣的列數。

(2)當x是向量,y是有一維與x同維的矩陣時,則繪製出多種不同色彩的曲線。曲線條數等於y矩陣的另一維數,x被作為這些曲線共同的橫座標。如:下程式可在同一座標中繪製出正弦和餘弦曲線(見圖2)。

  2   x=linspace(1,2*pi,100); %把0到2π等分100份,生成一個行向量

y=[sin(x);cos(x)];

plot(x,y)

2

 (3) plot函式最簡單的呼叫格式是隻包含一個輸入引數:plot(x)。在這種情況下,當x是實向量時,以該向量元素的下標為橫座標,元素值為縱座標畫出一條連續曲線,這實際上是繪製折線圖。當x是實矩陣時,則按列繪製,每列元素值相對其下標的曲線,曲線條數等於x陣的列數。

1.2 含多個輸入引數的plot函式

plot函式可以包含若干組向量對,每一向量對可以繪製出一條曲線。含多個輸入引數的plot函式呼叫格式為: plot(x1,y1,x2,y2,…,xn,yn)  

其中x1和y1,x2和y2,…,xn和yn分別組成一組向量對,每一組向量對的長度可以不同。每一向量對可以繪製出一條曲線,這樣可以在同一座標內繪製出多條曲線。

1.3 含選項的plot函式

MATLAB提供了一些繪圖選項,用於確定所繪曲線的線型、顏色和資料點標記符號。這些選項如表所示,可以組合使用。例如,b_.表示藍色點劃線,y:d表示黃色虛線並用菱形符標記資料點。當選項省略時,MATLAB規定,線型一律用實線,顏色將根據曲線的先後順序依次採用表給出的前7種顏色。含選項的plot函式呼叫格式為: plot(x1,y1,選項1,x2,y2, 選項2,…,xn,yn選項n)  

線 型 選 項

顏色選項

標記符號選項

線型

說明

顏色

說明

標記符號

說明

標記符號

說明

-

實線

b

藍色

.

s

方塊符(square)

:

虛線

g

綠色

圓圈

d

菱形符(diamond)

-.

點劃線

r

紅色

叉號

朝下三角符號

- -

雙劃線

c

青色

+

加號

朝上三角符號

m

品紅色

*

星號

<

朝左三角符號

y

黃色

>

朝右三角符號

k

黑色

p

 五角星符(pentagram)

w

白色

h

六角星符(hexagram)

1

  線型、顏色和標記符號選項

3  用不同線型和顏色在同一座標內繪製曲線及其包絡線。

程式為:x=(0:pi/100:2*pi)';       

 %產生一個從0到2π的一維陣列,單位增量為π/100

y1=2*exp(-0.5*x)*[1,-1];   %對應於x的包絡線的函式值

y2=2*exp(-0.5*x).*sin(2*pi*x);  %對應於x的曲線的函式值

x1=(0:12)/2;     %產生一個從0到12的一維陣列,單位增量為1/2

y3=2*exp(-0.5*x1).*sin(2*pi*x1);   %對應於x1的曲線的函式值

plot(x,y1,'g:',x,y2,'b--',x1,y3,'rp')   

%以不同的顏色不同線型繪製圖形

3

1.4 雙縱座標函式plotyy

plotyy函式是MATLAB新增的函式。它能把函式值具有不同量綱、不同數量級的兩個函式繪製在同一座標內。呼叫格式為: plotyy(x1,y1,x2,y2)

其中x1 - y1對應一條曲線,x2 - y2對應另一條曲線。橫座標的標度相同,縱座標有2個,左縱座標用於x1 - y1資料對,右縱座標用於x2 - y2資料對。

4 用不同標度在同一座標中繪製曲線和。

程式為: x1=0:pi/100:2*pi;

y1=2*exp(-0.5*x1).*sin(2*pi*x1);

y2=2*sin(x1);

plotyy(x1,y1,x1,y2)

4

2.繪製圖形的輔助操作

繪製完圖形後,對圖形加一些輔助操作,使圖形意義更加明確,是很有必要的。

2.1 圖形標註

在繪製圖形的同時,可以對圖形加上一些說明,如圖形名稱、座標軸說明以及圖形某一部分的含義等,這些都被稱為新增圖形標註。有關圖形標註函式的呼叫格式為:

title(圖形名稱)   用於說明圖形名稱;  

xlabel(x軸說明)、ylabel(y軸說明) (z軸說明用zlabel)   用於說明座標軸名稱;

text(x,y,圖形說明)   在(x,y)座標處新增圖形說明;

legend(圖例1,圖例2,…)  用於繪製曲線所用線型、顏色或資料點圖例,圖例放置在圖形空白處,使用者可以通過滑鼠移動圖例,將其放在所希望的位置。

另外,新增文字說明也可用gtext命令,執行該命令時,十字座標游標自動跟隨滑鼠移動,單擊滑鼠即可將文字放置在十字游標處。除legend函式外,其他函式同樣適用於三維圖形。

5  給圖3新增圖形標註。

程式為:     x1=0:pi/100:2*pi;

y1=2*exp(-0.5*x).*sin(2*pi*x);

y1=2*exp(-0.5*x1).*sin(2*pi*x1);

y2=2*sin(x1);

plotyy(x1,y1,x1,y2)

x=(0:pi/100:2*pi)';

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

y2=2*exp(-0.5*x).*sin(2*pi*x);

x1=(0:12)/2;

y3=2*exp(-0.5*x1).*sin(2*pi*x1);

plot(x,y1,'g:',x,y2,'b--',x1,y3,'rp');

title('曲線及其包絡線')

text(2.8,0.5,' 包絡線');

text(0.5,0.5,' 曲線y');

text(1.4,0.1,' 離散資料點');

legend('包絡線','包絡線','曲線y','離散資料點')         

5

2.2座標控制

在繪製圖形時,MATLAB可以自動根據要繪製曲線資料的範圍選擇合適的座標刻度,使得曲線儘可能清晰地顯示出來。所以,在一般情況下使用者不必選擇座標軸的刻度範圍。但是,如果使用者對座標系不滿意,可利用axis函式對其重新設定。該函式的呼叫格式為:

axis([xmin,xmax,ymin,ymax,zmin,zmax])

如果只給出前4個引數,同MATLAB按照給出的引數選擇座標系範圍,以便繪製出合適的二維曲線。如果給出全部引數,則系統按照引數選擇座標系範圍,以便繪製出合適的三維圖形。

一般情況下,繪圖命令每執行一次就重新整理當前圖形視窗,圖形視窗原有圖形就不存在了。若希望在已存在的圖形上再繼續新增新的圖形,可使用保持命令hold。hold on/off命令控制是保持原有圖形還是重新整理原有圖形,不帶引數的hold命令在兩種狀態之間進行切換。

給座標加網格線用grid命令來控制。grid on/off命令控制是畫還是不畫網格線,不帶引數的grid命令在兩種狀態之間進行切換。

2.3圖形視窗的分割

在實際應用中,經常需要在一個圖形視窗內繪製若干個獨立的圖形,這就需要對圖形視窗進行分割。分割後的圖形視窗由若干個繪圖區組成,第一個繪圖區可以建立獨立的座標系並繪製圖形。同一圖形視窗中的不同圖形稱為子圖,MATLAB系統提供了subplot函式,用來將當前視窗分割成若干個繪圖區。每一個區域代表一個獨立的子圖,也是一個獨立的座標系,可以通過subplot函式啟用某一區,該區稱為活動區,所發出的繪圖命令都是作用於活動區域。subplot函式的呼叫格式為:

subplot(m,n,p)

該函式將當前圖形視窗分成m×n個繪圖區,即每行n個,共m行,區號按行優先編號,且選定第p個區為當前活動區。在第一個繪圖區允許以不同的座標系單獨繪製圖形。

6 在一個圖形視窗中以子圖形式同時繪製正弦、餘弦、正切、餘切曲線。

程式為:x=linspace(0,2*pi,50);

y=sin(x);z=cos(x);

t=sin(x)./(cos(x)+eps);ct=cos(x)./(sin(x)+eps);

subplot(2,2,1);

plot(x,y);title('sin(x)');axis([0,2*pi,-1,1]);

subplot(2,2,2);

plot(x,z);title('cos(x)');axis([0,2*pi,-1,1]);

subplot(2,2,3);

plot(x,t);title('tan(x)');axis([0,2*pi,-40,40]);

subplot(2,2,4);

plot(x,ct);title('cot(x)');axis([0,2*pi,-40,40]);

輸出結果為:

6

3.繪製二維圖形的其他函式

3.1其他形式的線性直角座標圖

線上性直角座標系中,其他形式的圖形有條形圖、階梯圖、杆圖和填充圖等,所採用的函式分別是:  bar(x,y,選項)、stairs(x,y,選項)、stem(x,y,選項)、fill(x1,y1,選項1, x2,y2,選項2,…)

前三個函式用法與plot函式相似,只是沒有多輸入變數形式。fill函式按向量元素下標漸增次序依次用直線段連線x,y對應元素定義的資料點。假若這樣連線所得折線不封閉,那麼MATLAB將自動把該折線的首尾連線起來,構成封閉多邊形,然後將多邊形內部塗滿指定的顏色。

7 分別以條形圖、階梯圖、杆圖和填充圖繪製曲線。

程式為:x=0:0.2:5;

y=2*exp(-1*x);

subplot(2,2,1);bar(x,y,'g');

title('bar(x,y)');axis([0,5,0,2]);

subplot(2,2,2);stairs(x,y,'b');

title('stairs(x,y)');axis([0,5,0,2]);

subplot(2,2,3);stem(x,y,'k');

title('stem(x,y)');axis([0,5,0,2]);

subplot(2,2,4);fill(x,y,'r');

title('fill(x,y)');axis([0,5,0,2]);

輸出結果為:

                 7

3.2極座標圖

polar函式用來繪製極座標圖,其呼叫格式為:polar(theta,rho,選項),其中theta為極座標極角, rho為極座標矢徑,選項內容與plot函式相似。

8  繪製心形線的極座標圖。

程式為:  theta=0:0.02:2*pi;

rho=2*(1+cos(theta));

polar(theta,rho,'r');

輸出結果(見圖8)。

    3.3對數座標圖形

在實際應用中,經常用到對數座標,例如控制理論中的Bode圖。MATLAB提供了繪製對數和半對數座標曲線的函式,呼叫格式為:

semilogx(x1,y1,選項1,x2,y2,選項2,…)  半對數座標,x軸為常用對數刻度,y軸為線性刻度;

semilogy(x1,y1,選項1,x2,y2,選項2,…) 半對數座標,x軸為線性刻度,y軸為常用對數刻度;

loglog(x1,y1,選項1,x2,y2,選項2,…)  全對數座標,x,y軸均採用常用對數刻度。

二、 三維圖形

     1.繪製三維曲線的最基本函式

                       8

最基本的三級圖形函式為plot3,它將二維繪圖函式plot的有關功能擴充套件到三維空間,用來繪製三維曲線。plot3函式與plot函式用法十分相似,其呼叫格式為:

plot3(x1,y1,z1,選項1,x2,y2,z2,選項2,…, xn,yn,zn,選項n)

其中每一組x,y,z組成一組曲線的座標引數,選項的定義與函式plot相同。當x,y,z是同維向量時,則x,y,z對應元素構成一條三維曲線。當x,y,z是同維矩陣時,則以x,y,z對應列元素繪製三維曲線,曲線條數等於矩陣列數。

9 繪製空間曲線:,曲線所對應的引數方程為:。

程式為:  t=0:pi/100:2*pi;

x=8*cos(t);y=4*sqrt(2)*sin(t);z=-4*sqrt(2)*sin(t);

plot3(x,y,z,'rp');

title('Line in 3-D Space');text(0,0,0,'origin');

xlabel('X');ylabel('Y');zlabel('Z');

輸出結果為:

                                   9

2.三維曲面

2.1 平面網格座標矩陣的生成

繪製所代表的三維曲面圖,先要在平面選定一矩形區域,假定區域D=,然後將在方向分成份,將在方向分成份,由各劃分點分別作平行於兩座標軸的直線,將區域D分成個小矩形,生成代表每一個小矩形頂點座標的平面網格座標矩陣,最後利用有關函式繪圖。

產生平面區域內的網格座標矩陣有兩種方法:

● 利用矩陣運算生成,命令如下:

 x=a:dx:b;y=c:dy:d;

X=ones(size(y))*x;

Y=y* ones(size(x));

上述語句執行後,矩陣X的每一行都是向量,行數等於向量的元素的個數,矩陣Y的每一行都是向量,列數等於向量的元素的個數。於是X和Y相同位置上的元素恰好是區域D的網格點的座標。若根據每一個網格點上的座標求函式值,則得到函式矩陣Z。顯然,X,Y,Z各列或各行所對應座標,對應於一條空間曲線,空間曲線的集合組成空間曲面。

● 利用meshgrid函式生成,命令如下:

x=a:dx:b;y=c:dy:d;

[X,Y]=meshgrid(x,y);

語句執行後,所得到的網格座標矩陣X,Y與方法(1)得到的相同。當 時,meshgrid函式可寫成meshgrid(x)。

10 已知,求不定方程。

程式如下:

x=10:45;y=6:37;

[x,y]=meshgrid(x,y);   % 在[10,45]×[6,37]區域生成網格座標

z=3*x+5*y;

k=find(z==114);      % 求出解的位置

x(k),y(k)            %輸出對應位置的x,y,即方程的解。

輸出結果為: ans =

    13    18    23    28

ans =

    15    12     9     6

2.2繪製三維曲面的函式

MATLAB提供了mesh函式和surf函式來繪製三維曲面圖。mesh函式用於繪製三維網格圖,在不需要繪製特別精細的三維曲面圖時,可以通過三維網格圖來表示三維曲面。surf函式用於繪製三維曲面圖,各線條之間的補面用顏色填充。呼叫格式為:

mesh(x,y,z,c)、surf(x,y,z,c)。

一般情況下,是維數相同的矩陣。是網格座標矩陣,是網格點上的高度矩陣,用於指定在不同高度下的顏色範圍。省略時,MATLAB認為,亦即顏色的設定是正比於圖形的高度的,這樣就可以得出層次分明的三維圖形。當省略時,把矩陣的列下標當作軸座標,把矩陣的行下標當作軸座標,然後繪製三維曲面圖。當是向量時,必須要求的長度等於矩陣的列,的長度等於矩陣的行,向量元素的組合構成網格點的座標,座標則取自矩陣,然後繪製三維曲面圖。

11 用三維曲面圖表現函式。

為方便分析各種三維曲面的特徵,下面畫出3種不同形式的曲面。

程式1:    x=-4:4;y=x;[x,y]=meshgrid(x,y);

            z=x.^2+y.^2;mesh(x,y,z);

xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');title('mesh');

輸出結果見圖10。

程式2:     x=-4:4;y=x;[x,y]=meshgrid(x,y);

z=x.^2+y.^2;surf(x,y,z);

xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');title('surf');

輸出結果見圖11。

程式3:      x=-4:0.1:4;y=x;[x,y]=meshgrid(x,y);

z=x.^2+y.^2;plot3(x,y,z);

xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');title('plot3-1');grid