在繪制圖形時,Matlab可以自動根據要繪制曲線數據的范圍選擇合適的坐標刻度,使得曲線能夠盡可能清晰的顯示出來。所以,一般情況下用戶不必選擇坐標軸的刻度范圍。但是,如果用戶對坐標不滿意,可以利用axis函數對其重新設定。其調用格式為
axis([xmin xmax ymin ymax zmin zmax])
如果只給出前四個參數,則按照給出的x、y軸的最小值和最大值選擇坐標系范圍,繪制出合適的二維曲線。如果給出了全部參數,則繪制出三維圖形。
axis函數的功能豐富,其常用的用法有:
axis equal :縱橫坐標軸采用等長刻度
axis square:產生正方形坐標系(默認為矩形)
axis auto:使用默認設置
axis off:取消坐標軸
axis on :顯示坐標軸
還有:給坐標加網格線可以用grid命令來控制,grid on/off命令控制畫還是不畫網格線,不帶參數的grid命令在兩種之間進行切換。
給坐標加邊框用box命令控制。和grid一樣用法
例 :繪制分段函數,并添加圖形標注。(略)
3. 圖形保持
一般情況下,每執行一次繪圖命令,就刷新一次當前圖形窗口,圖形窗口原有圖形將不復存在,如果希望在已經存在的圖形上再繼續添加新的圖形,可以使用圖形保持命令hold。hold on/off 命令是保持原有圖形還是刷新原有圖形,不帶參數的hold命令在兩者之間進行切換。
例:(略)
4. 圖形窗口分割
在實際應用中,經常需要在一個圖形窗口中繪制若干個獨立的圖形,這就需要對圖形窗口進行分割。分割后的圖形窗口由若干個繪圖區組成,每一個繪圖區可以建立獨立的坐標系并繪制圖形。同一圖形窗口下的不同圖形稱為子圖。Matlab提供了subplot函數用來將當前窗口分割成若干個繪圖區,每個區域代表一個獨立的子圖,也是一個獨立的坐標系,可以通過subplot函數激活某一區,該區為活動區,所發出的繪圖命令都是作用于該活動區域。調用格式:
subplot(m,n,p)
該函數把當前窗口分成m×n個繪圖區,m行,每行n個繪圖區,區號按行優先編號。其中第p個區為當前活動區。每一個繪圖區允許以不同的坐標系單獨繪制圖形。
例:(略)
三.繪制二維圖形的其他函數
1. 其他形式的線性直角坐標圖
在線性直角坐標中,其他形式的圖形有條形圖、階梯圖、桿圖和填充圖等,所采用的函數分別為:
bar(x,y,選項)????? 選項在單引號中
stem(x,y,選項)
fill(x1,y1,選項1,x2,y2,選項2,…)
前三個函數和plot的用法相似,只是沒有多輸入變量形式。fill函數按向量元素下標漸增次序依次用直線段連接x,y對應元素定義的數據點。
例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函數用來繪制極坐標圖,調用格式為:
polar(theta,rho,選項)
其中,theta為極坐標極角,rho為極徑,選項的內容和plot函數相似。
例5-9:繪制 的極坐標圖
theta=0:0.01:2*pi;
rho=sin(3*theta).*cos(5*theta);
polar(theta,rho,'r');
3. 對數坐標圖
在實際應用中,經常用到對數坐標,Matlab提供了繪制對數和半對數坐標曲線的函數,其調用格式為:
semilogx(x1,y1,選項1,x2,y2,選項2,…)
semilogy(x1,y1,選項1,x2,y2,選項2,…)
loglog(x1,y1,選項1,x2,y2,選項2,…)
這些函數中選項的定義和plot函數完全一樣,所不同的是坐標軸的選取。semilogx函數使用半對數坐標,x軸為常用對數刻度,而y軸仍保持線性刻度。semilogy恰好和semilogx相反。loglog函數使用全對數坐標,x、y軸均采用對數刻度。
例:略
4. 對函數自適應采樣的繪圖函數
5. 其他形式的二維圖形
二. 三維繪圖
一.繪制三維曲線的基本函數
最基本的三維圖形函數為plot3,它將二維繪圖函數plot的有關功能擴展到三維空間,可以用來繪制三維曲線。其調用格式為:
plot3(x1,y1,z1,選項1,x2,y2,z2,選項2,…)
其中每一組x,y,z組成一組曲線的坐標參數,選項的定義和plot的選項一樣。當x,y,z是同維向量時,則x,y,z對應元素構成一條三維曲線。當x,y,z是同維矩陣時,則以x,y,z對應列元素繪制三維曲線,曲線條數等于矩陣的列數。
例513 繪制空間曲線
該曲線對應的參數方程為
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用來繪制三維曲面圖,各線條之間的補面用顏色填充。其調用格式為:
mesh(x,y,z,c)
surf(x,y,z,c)
一般情況下,x,y,z是維數相同的矩陣,x,y是網格坐標矩陣,z是網格點上的高度矩陣,c用于指定在不同高度下的顏色范圍。c省略時,Matlab認為c=z,也即顏色的設定是正比于圖形的高度的。這樣就可以得到層次分明的三維圖形。當x,y省略時,把z矩陣的列下標當作x軸的坐標,把z矩陣的行下標當作y軸的坐標,然后繪制三維圖形。當x,y是向量時,要求x的長度必須等于z矩陣的列,y的長度必須等于必須等于z的行,x,y向量元素的組合構成網格點的x,y坐標,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 繪制的三維曲面實際上由三維曲線組合而成。可以分析plot(x’,y’,z’)所繪制的曲面的特征。
例516 繪制兩個直徑相等的圓管相交的圖形。
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
例517 分析由函數 構成的曲面形狀與平面z=a的交線。
評論
查看更多