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