Matlab基礎繪圖

(本文章來自網上整理)ide

一.二維繪圖

二維圖形是將平面座標上的數據點鏈接起來的平面圖形。能夠採用不一樣的座標系,如直角座標、對數座標、極座標等。二維圖形的繪製是其餘繪圖操做的基礎。函數

一.繪製二維曲線的基本函數

Matlab中,最基本並且應用最爲普遍的繪圖函數爲plot,利用它能夠在二維平面上繪製出不一樣的曲線。spa

1. plot函數的基本用法字符串

plot函數用於繪製二維平面上的線性座標曲線圖,要提供一組x座標和對應的y座標,能夠繪製分別以xy爲橫、縱座標的二維曲線。plot函數的應用格式數學

plot(x,y)     其中x,y爲長度相同的向量,存儲x座標和y座標。it

[0 , 2pi]區間,繪製曲線table

程序以下:在命令窗口中輸入如下命令  class

>> x=0:pi/100:2*pi;基礎

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

>> plot(x,y)

程序執行後,打開一個圖形窗口,在其中繪製出以下曲線

注意:指數函數和正弦函數之間要用點乘運算,由於兩者是向量。

這是以參數形式給出的曲線方程,只要給定參數向量,再分別求出x,y向量便可輸出曲線:

>> t=-pi:pi/100:pi;

>> x=t.*cos(3*t);

>> y=t.*sin(t).*sin(t);

>> plot(x,y)

以上提到plot函數的自變量x,y爲長度相同的向量,這是最多見、最基本的用法,實際應用中還有一些變化。

2. 含多個輸入參數的plot函數

plot函數能夠包含若干組向量對,每一組能夠繪製出一條曲線。含多個輸入參數的plot函數調用格式爲:plot(x1y1x2y2xnyn)

以下列命令能夠在同一座標中畫出3條曲線。

>> x=linspace(0,2*pi,100);

>> plot(x,sin(x),x,2*sin(x),x,3*sin(x))

 

當輸入參數有矩陣形式時,配對的x,y按對應的列元素爲橫座標和縱座標繪製曲線,曲線條數等於矩陣的列數。

>> x=linspace(0,2*pi,100);

>> y1=sin(x);

>> y2=2*sin(x);

>> y3=3*sin(x);

>> x=[x;x;x]';

>> y=[y1;y2;y3]';

>> plot(x,y,x,cos(x))

x,y都是含有三列的矩陣,它們組成輸入參數對,繪製三條曲線;xcos(x)又組成一對,繪製一條餘弦曲線。

利用plot函數能夠直接將矩陣的數據繪製在圖形窗體中,此時plot函數將矩陣的每一列數據做爲一條曲線繪製在窗體中。如

>> A=pascal(5)

A =

     1     1     1     1     1

     1     2     3     4     5

     1      3     6    10    15

     1     4    10    20    35

     1     5    15    35    70

>> plot(A)

3. 含選項的plot函數

Matlab提供了一些繪圖選項,用於肯定所繪曲線的線型、顏色和數據點標記符號。這些選項如表所示:

線型

顏色

標記符號

實線

b藍色

.   

方塊

虛線

g綠色

圓圈

菱形

-. 點劃線

r紅色

× 叉號

朝下三角符號

-- 雙劃線

c青色

加號

朝上三角符號

m品紅

星號

<朝左三角符號<

y×××

>朝右三角符號

k黑色

五角星

w白色

六角星

 

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

>> 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,'k:',x,y2,'b--',x1,y3,'rp');

在該plot函數中包含了3組繪圖參數,第一組用黑色虛線畫出兩條包絡線,第二組用藍色雙劃線畫出曲線y,第三組用紅色五角星離散標出數據點。

4. 雙縱座標函數plotyy

Matlab中,若是須要繪製出具備不一樣縱座標標度的兩個圖形,可使用plotyy函數,它能把具備不一樣量綱,不一樣數量級的兩個函數繪製在同一個座標中,有利於圖形數據的對比分析。使用格式爲:plotyy(x1,y1,x2,y2)

x1,y1對應一條曲線,x2,y2對應另外一條曲線。橫座標的標度相同,縱座標有兩個,左邊的對應x1,y1數據對,右邊的對應x2,y2

二.繪製圖形的輔助操做

繪製完圖形之後,可能還須要對圖形進行一些輔助操做,以使圖形意義更加明確,可讀性更強。

1. 圖形標註

在繪製圖形時,能夠對圖形加上一些說明,如圖形的名稱、座標軸說明以及圖形某一部分的含義等,這些操做稱爲添加圖形標註。有關圖形標註函數的調用格式爲:

title圖形名稱) (都放在單引號內)

xlabelx軸說明

ylabely軸說明

textxy圖形說明

legend圖例1圖例2) P190

其中,titlexlabelylabel函數分別用於說明圖形和座標軸的名稱。text函數是在座標點(xy)處添加圖形說明。(P88 或用gtext命令)。legend函數用於繪製曲線所用線型、顏色或數據點標記圖例,圖例放置在空白處,用戶還能夠經過鼠標移動圖例,將其放到所但願的位置。除legend函數外,其餘函數一樣適用於三維圖形,在三維中z座標軸說明用zlabel函數。

上述函數中的說明文字,除了使用標準的ASCII字符外,還可使用LaTex(一種流行的數學排版軟件)格式的控制字符,這樣就能夠在圖形上添加希臘字符,數學符號和公式等內容。在Matlab支持的LaTex字符串中,用/bf , /it , /rm控制字符分別定義黑體、斜體和正體字符,受LaTex字符串控制部分要加大括號{}括起來。例如,text(0.30.5the usful {/bf MATLAB}),將使MATLAB一詞黑體顯示。一些經常使用的LaTex字符見表,各個字符能夠單獨使用也能夠和其餘字符及命令配合使用。如text(0.3 ,0.5 ,sin({/omega}t+{/beta}))

將獲得標註效果 。

標識符

符號

標識符

符號

標識符

符號

/alpha

/epsilon

/infty

/beta

/eta

/int

/gamma

/Gamma

/partial

/delta

/Delta

/leftarrow

/theta

/Theta

/rightarrow

/lambda

/Lambda

/downarrow

/xi

/Xi

/uparrow

/pi

/Pi

/div

/omega

/Omega

/times

/sigma

/Sigma

/pm

/phi

/Phi

/leq

/psi

/Psi

/geq

/rho

/tau

/neq

/mu

/zeta

/forall

/nu

/chi

/exists

 

2.座標控制

在繪製圖形時,Matlab能夠自動根據要繪製曲線數據的範圍選擇合適的座標刻度,使得曲線可以儘量清晰的顯示出來。因此,通常狀況下用戶沒必要選擇座標軸的刻度範圍。可是,若是用戶對座標不滿意,能夠利用axis函數對其從新設定。其調用格式爲

axis[xmin xmax ymin ymax zmin zmax]

若是隻給出前四個參數,則按照給出的xy軸的最小值和最大值選擇座標系範圍,繪製出合適的二維曲線。若是給出了所有參數,則繪製出三維圖形。

axis函數的功能豐富,其經常使用的用法有:

axis equal :縱橫座標軸採用等長刻度

axis square:產生正方形座標系(默認爲矩形)

axis auto:使用默認設置

axis off:取消座標軸

axis on :顯示座標軸

還有:給座標加網格線能夠用grid命令來控制,grid on/off命令控制畫仍是不畫網格線,不帶參數的grid命令在兩種之間進行切換。

給座標加邊框用box命令控制。和grid同樣用法

例 :繪製分段函數,並添加圖形標註。(略)

3. 圖形保持

通常狀況下,每執行一次繪圖命令,就刷新一次當前圖形窗口,圖形窗口原有圖形將不復存在,若是但願在已經存在的圖形上再繼續添加新的圖形,可使用圖形保持命令holdhold on/off 命令是保持原有圖形仍是刷新原有圖形,不帶參數的hold命令在二者之間進行切換。

例:(略)

4. 圖形窗口分割

在實際應用中,常常須要在一個圖形窗口中繪製若干個獨立的圖形,這就須要對圖形窗口進行分割。分割後的圖形窗口由若干個繪圖區組成,每個繪圖區能夠創建獨立的座標系並繪製圖形。同一圖形窗口下的不一樣圖形稱爲子圖。Matlab提供了subplot函數用來將當前窗口分割成若干個繪圖區,每一個區域表明一個獨立的子圖,也是一個獨立的座標系,能夠經過subplot函數激活某一區,該區爲活動區,所發出的繪圖命令都是做用於該活動區域。調用格式:

subplotmnp

該函數把當前窗口分紅m×n個繪圖區,m行,每行n個繪圖區,區號按行優先編號。其中第p個區爲當前活動區。每個繪圖區容許以不一樣的座標系單獨繪製圖形。

例:(略)

三.繪製二維圖形的其餘函數

1. 其餘形式的線性直角座標圖

在線性直角座標中,其餘形式的圖形有條形圖、階梯圖、杆圖和填充圖等,所採用的函數分別爲:

barxy,選項)      選項在單引號中

stairsxy,選項)

stemxy,選項)

fillx1y1,選項1x2y2,選項2

前三個函數和plot的用法類似,只是沒有多輸入變量形式。fill函數按向量元素下標漸增次序依次用直線段鏈接xy對應元素定義的數據點。

5-8:分別以條形圖、填充圖、階梯圖和杆圖形式繪製曲線

x=0:0.35:7;

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

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

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

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

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

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

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

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

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

2. 極座標圖

polar函數用來繪製極座標圖,調用格式爲:

polarthetarho,選項)

其中,theta爲極座標極角,rho爲極徑,選項的內容和plot函數類似。

繪製極座標圖

theta=0:0.01:2*pi;

rho=sin(3*theta).*cos(5*theta);

polar(theta,rho,'r');

 

3. 對數座標圖

在實際應用中,常常用到對數座標,Matlab提供了繪製對數和半對數座標曲線的函數,其調用格式爲:

semilogxx1y1,選項1x2y2,選項2

semilogyx1y1,選項1x2y2,選項2

loglogx1y1,選項1x2y2,選項2

這些函數中選項的定義和plot函數徹底同樣,所不一樣的是座標軸的選取。semilogx函數使用半對數座標,x軸爲經常使用對數刻度,而y軸仍保持線性刻度。semilogy剛好和semilogx相反。loglog函數使用全對數座標,xy軸均採用對數刻度。

二. 三維繪圖

一.繪製三維曲線的基本函數

最基本的三維圖形函數爲plot3,它將二維繪圖函數plot的有關功能擴展到三維空間,能夠用來繪製三維曲線。其調用格式爲:

plot3x1y1z1,選項1x2y2z2,選項2

其中每一組xyz組成一組曲線的座標參數,選項的定義和plot的選項同樣。當xyz是同維向量時,則xyz對應元素構成一條三維曲線。當xyz是同維矩陣時,則以xyz對應列元素繪製三維曲線,曲線條數等於矩陣的列數。

繪製空間曲線

該曲線對應的參數方程爲

t=0:pi/50:2*pi;

x=8*cos(t);

y=4*sqrt(2)*sin(t);

z=-4*sqrt(2)*sin(t);

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

title('Line in 3-D Space');

text(0,0,0,'origin');

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

 

二.三維曲面

1.平面網格座標矩陣的生成

當繪製z=f(x,y)所表明的三維曲面圖時,先要在xy平面選定一矩形區域,假定矩形區域爲D[a,b]×[c,d],而後將[a,b]x方向分紅m份,將[c,d]y方向分紅n份,由各劃分點作平行軸的直線,把區域D分紅m×n個小矩形。生成表明每個小矩形頂點座標的平面網格座標矩陣,最後利用有關函數繪圖。

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

利用矩陣運算生成。

x=a:dx:b;

y=(c:dy:d);

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

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

通過上述語句執行後,矩陣X的每一行都是向量x,行數等於向量y的元素個數,矩陣Y的每一列都是向量y,列數等於向量x的元素個數。

利用meshgrid函數生成;

x=a:dx:b;

y=c:dy:d;

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

語句執行後,所獲得的網格座標矩陣和上法,相同,當x=y時,能夠寫成meshgrid(x)

2.繪製三維曲面的函數

Matlab提供了mesh函數和surf函數來繪製三維曲面圖。mesh函數用來繪製三維網格圖,而surf用來繪製三維曲面圖,各線條之間的補面用顏色填充。其調用格式爲:

meshxyzc

surfxyzc

通常狀況下,xyz是維數相同的矩陣,xy是網格座標矩陣,z是網格點上的高度矩陣,c用於指定在不一樣高度下的顏色範圍。c省略時,Matlab認爲c=z,也即顏色的設定是正比於圖形的高度的。這樣就能夠獲得井井有條的三維圖形。當xy省略時,把z矩陣的列下標看成x軸的座標,把z矩陣的行下標看成y軸的座標,而後繪製三維圖形。當xy是向量時,要求x的長度必須等於z矩陣的列,y的長度必須等於必須等於z的行,xy向量元素的組合構成網格點的xy座標,z座標則取自z矩陣,而後繪製三維曲線。

515 用三維曲面圖表現函數 :

爲了便於分析三維曲面的各類特徵,下面畫出3種不一樣形式的曲面。

%program 1

x=0:0.1:2*pi;

[x,y]=meshgrid(x);

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

mesh(x,y,z);

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

title('mesh'); pause;

%program 2

x=0:0.1:2*pi;

[x,y]=meshgrid(x);

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

surf(x,y,z);

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

title('surf'); pause;

%program 3

x=0:0.1:2*pi;

[x,y]=meshgrid(x);

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

plot3(x,y,z);

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

title('plot3-1');grid;

 

程序執行結果分別如上圖所示。從圖中能夠發現,網格圖(mesh)中線條有顏色,線條間補面無顏色。曲面圖(surf)的線條都是黑色的,線條間補面有顏色。進一步觀察,曲面圖補面顏色和網格圖線條顏色都是沿z軸變化的。用plot3 繪製的三維曲面實際上由三維曲線組合而成。能夠分析plotxyz)所繪製的曲面的特徵。

繪製兩個直徑相等的圓管相交的圖形。

m=30;

z=1.2*(0:m)/m;

r=ones(size(z));

theta=(0:m)/m*2*pi;

x1=r'*cos(theta);y1=r'*sin(theta);%生成第一個圓管的座標矩陣

z1=z'*ones(1,m+1);

x=(-m:2:m)/m;

x2=x'*ones(1,m+1);y2=r'*cos(theta);%生成第一個圓管的座標矩陣

z2=r'*sin(theta);

surf(x1,y1,z1);          %繪製豎立的圓管

axis equal ,axis off

hold on

surf(x2,y2,z2);          %繪製平放的圓管

axis equal ,axis off

title ('兩個等直徑圓管的交線');

hold off

 

分析由函數 構成的曲面形狀與平面z=a的交線。

此外,還有兩個和mesh函數類似的函數,即帶等高線的三維網格曲面函數meshc和帶底座的三維網格曲面函數meshz,其用法和mesh相似。不一樣的是,meshc還在xy平面上繪製曲面在z軸方向的等高線,meshz還在xy平面上繪製曲面的底座。

surf函數也有兩個相似的函數,即具備等高線的曲面函數surfc和具備光照效果的曲面函數surfl

xy平面內選擇[-8, 8]×[8, 8]繪製函數,

[x,y]=meshgrid(-8:0.5:8);

z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps);

subplot(2,2,1);

meshc(x,y,z);

title('meshc');

subplot(2,2,2);

meshz(x,y,z);

title('meshz');

subplot(2,2,3);

surfc(x,y,z);

title('surfc');

subplot(2,2,4);

surfl(x,y,z);

title('surfl');

3.標準三維曲面

Matlab提供了一些函數用於繪製標準三維曲面,這些函數能夠產生相應的繪圖數據,經常使用於三維圖形的演示。如,sphere函數和cylinder函數分別用於繪製三維球面和柱面。sphere函數的調用格式爲:

[x,y,z]=sphere(n);

該函數將產生(n+1×n+1矩陣xy。採用這三個矩陣能夠繪製出圓心位於原點、半徑爲1的單位球體。若在調用該函數時不帶輸出參數,則直接繪製所需球面。n決定了球面的圓滑程度,其默認值爲20。若n值取的比較小,則繪製出多面體的表面圖。

cylinder函數的調用格式爲:

[xyz]cylinderRn

其中R是一個向量,存放柱面各個等間隔高度上的半徑,n表示在圓柱圓周上有n個間隔點,默認有20個間隔點。如:cylinder3)生成一個圓柱,cylinder[101])生成一個圓錐。而t=0:pi/100:4*pi; R=sin(t); cylinder(R,30);生成一個正弦圓柱面。

另外Matlab還提供了一個peaks函數,稱爲多峯函數,經常使用於三維曲面的演示。該函數能夠用來生成繪圖數據矩陣,矩陣元素由函數:

 

在矩形區域[3 3]×[3 3]的等分網格點上的函數值肯定。如:z=peaks30

將生成一個30×30矩陣,

519 繪製標準三維曲面圖形

t=0:pi/20:2*pi;

[x,y,z]=cylinder(2+sin(t),30);

subplot(1,3,1);

surf(x,y,z);

subplot(1,3,2);

[x,y,z]=sphere;

surf(x,y,z);

subplot(1,3,3);

[x,y,z]=peaks(30);

meshz(x,y,z);

 

3.其餘三維圖形。

在介紹二維圖形時,曾經提到條形圖、杆圖、餅圖和填充圖等特殊圖形,它們還能夠以三維形式出現,其函數分別爲bar3stem3pie3fill3

bar3繪製三維條形圖,經常使用格式爲:

bar3y);

bar3xy

在第一種格式中,y的每一個元素對應於一個條形。第二種格式在x指定的位置上繪製y中元素的條形圖。

stem3函數繪製離散序列數據的三維杆圖,經常使用格式爲:

stem3z

stem3xyz

第一種格式將數據序列z表示爲從xy平面向上延伸的杆圖,xy自動生成。第二種格式在xy指定的位置上繪製數據序列z的杆圖,xyz的維數要相同。

pie3函數繪製三維餅圖,經常使用格式爲:

pie3x

x爲向量,用x中的數據繪製一個三維餅圖。

fill3函數可在三維空間內繪製出填充過的多邊形,經常使用格式爲:

fill3xyzc

xyz作多邊形的頂點,而c指定了填充的顏色。

520 繪製三維圖形。

1繪製魔方陣的三維條形圖2以三維杆圖形式繪製曲線y=2sinx 3已知[2347,1827,2043,3025] ,繪製三維餅圖     4用隨機的頂點座標值畫出5個×××三角形

subplot(2,2,1);

bar3(magic(4));

subplot(2,2,2);

y=2*sin(0:pi/10:2*pi);

stem3(y);

subplot(2,2,3);

pie3([2347,1827,2043,3025]);

subplot(2,2,4);

fill3(rand(3,5),rand(3,5),rand(3,5),'y');

除了上面討論的三維圖形外,經常使用的圖形還有瀑布圖和三維曲面的等高線圖。繪製瀑布圖用waterfall函數,用法和meshz函數類似,只是它的網格線在x軸方向出現,具備瀑布效果。等高線圖分二維和三維兩種形式,分別使用函數contourcontour3繪製。

521 繪製多峯函數的瀑布圖和等高線圖。

 

subplot(1,2,1);

[X,Y,Z]=peaks(30);

waterfall(X,Y,Z);

xlabel('XX');ylabel('YY');zlabel('ZZ');

subplot(1,2,2);

contour3(X,Y,Z,12,'k');%其中12表明高度的等級數

xlabel('XX');ylabel('YY');zlabel('ZZ');

三.隱函數做圖

若是給定了函數的顯式表達式,能夠先設置自變量向量,而後根據表達式計算函數向量,從而用plot等函數繪製出圖形。可是當函數採用隱函數形式時,如: ,則很難利用上述方法繪製圖形。Matlab提供了一個ezplot函數繪製隱函數圖形。用法以下:

①     對於函數f=f(x)ezplot的調用格式爲:

ezplot(f),在默認區間(-2pi2pi)繪製圖形。

ezplotf[a,b]),在區間(ab)繪製

②     對於隱函數f=f(x,y)ezplot的調用格式爲;

ezplot(f),在默認區間(-2pi2pi,-2pi2pi)繪製f(x,y)=0的圖形。

ezplotf[xminxmaxyminymax]);在區間          繪製圖形。

ezplotf[a,b]),在區間(ab),(ab)繪製

③     對於參數方程x=x(t),y=y(t),ezplot函數的調用格式爲:

ezplotxy),在默認區間 繪製x=x(t),y=y(t)圖形。

ezplotxy[tmintmax]),在區間(tmintmax)繪製x=x(t),y=y(t)圖形。

525 隱函數繪圖舉例。

 

subplot(2,2,1);

ezplot('x^2+y^2-9');axis equal;

subplot(2,2,2);

ezplot('x^3+y^3-5*x*y+1/5')

subplot(2,2,3);

ezplot('cos(tan(pi*x))',[0,1]);

subplot(2,2,4);

ezplot('8*cos(t)','4*sqrt(2)*sin(t)',[0,2*pi]);

其餘隱函數繪圖還有,ezpolarezcontourezplot3ezmeshezmeshcezsurfezsurfc

相關文章
相關標籤/搜索