第7章 繪圖與圖形處理
人們很難從一大堆原始的數據中發現它們的含義,而數據圖形恰能使視覺感官直接感受到數據的許多內在本質,發現數據的內在聯系。MATLAB可以表達出數據的二維,三維,甚至四維的圖形。通過圖形的線型,立面,色彩,光線,視角等屬性的控制,可把數據的內在特征表現得淋漓盡致。下面我們分別介紹圖形的命令。
7.1 二維圖形
7.1.1 基本平面圖形命令
命令1 plot
功能 線性二維圖。在線條多於一條時,若用戶沒有指定使用顏色,則plot循環使用由當前坐標軸顏色順序屬性(current axes ColorOrder property)定義的顏色,以區別不同的線條。在用完上述屬性值后,plot又循環使用由坐標軸線型順序屬性(axes LineStyleOrder property)定義的線型,以區別不同的線條。
用法 plot(X,Y) 當X,Y均為實數向量,且為同維向量(可以不是同型向量),X=[x(i)],Y=[y(i)],則plot(X,Y)先描出點(x(i),y(i)),然后用直線依次相連;若X,Y為復數向量,則不考慮虛數部分。若X,Y均為同維同型實數矩陣,X = [X(i)],Y = [Y(i)],其中X(i),Y(i)為列向量,則plot(X,Y)依次畫出plot(X(i),Y(i)),矩陣有幾列就有幾條線;若X,Y中一個為向量,另一個為矩陣,且向量的維數等於矩陣的行數或者列數,則矩陣按向量的方向分解成幾個向量,再與向量配對分別畫出,矩陣可分解成幾個向量就有幾條線;在上述的幾種使用形式中,若有復數出現,則復數的虛數部分將不被考慮。
plot(Y) 若Y為實數向量,Y的維數為m,則plot(Y)等價於plot(X,Y),其中x=1:m;若y為實數矩陣,則把y按列的方向分解成幾個列向量,而y 的行數為n,則plot(Y)等價於plot(X,Y)其中x=[1;2;…;n];在上述的幾種使用形式中,若有復數出現,則復數的虛數部分將不被考慮。
plot(X1,Y1,X2,Y2,…),其中Xi與Yi成對出現,plot(X1,Y1,X2,Y2,…)將分別按順序取兩數據Xi與Yi進行畫圖。若其中僅僅有Xi或Yi是矩陣,其余的為向量,向量維數與矩陣的維數匹配,則按匹配的方向來分解矩陣,再分別將配對的向量畫出。
plot(X1,Y1,LineSpec1,X2,Y2,LineSpec2…) 將按順序分別畫出由三參數定義Xi,Yi,LineSpeci的線條。其中參數LineSpeci指明了線條的類型,標記符號,和畫線用的顏色。在plot 命令中我們可以混合使用三參數和二參數的形式:
plot(X1,Y1,LineSpec1,X2,Y2,X3,Y3,LineSpec3)
plot(…,'PropertyName',PropertyValue,…) 對所有的用plot生成的line圖形對象中指定的屬性進行恰當的設置。
h = plot(…) 返回line圖形對象句柄的一列向量,一線條對應一句柄值。
說明 參數LineSpec
功能 定義線的屬性。Maltab允許用戶對線條定義如下的特性:
1.線型
表7-1
定義符 |
- |
-- |
: |
-. |
線型 |
實線(缺省值) |
划線 |
點線 |
點划線 |
2.線條寬度
指定線條的寬度,取值為整數(單位為像素點)
3.顏色
表7-2
定義符 |
R(red) |
G(green) |
b(blue) |
c(cyan) |
顏色 |
紅色 |
綠色 |
蘭色 |
青色 |
定義符 |
M(magenta) |
y(yellow) |
k(black) |
w(white) |
顏色 |
品紅 |
黃色 |
黑色 |
白色 |
4.標記類型
表7-3
定義符 |
+ |
o(字母) |
* |
. |
x |
標記類型 |
加號 |
小圓圈 |
星號 |
實點 |
交叉號 |
定義符 |
d |
^ |
v |
> |
< |
標記類型 |
棱形 |
向上三角形 |
向下三角形 |
向右三角形 |
向左三角形 |
定義符 |
s |
h |
P |
||
標記類型 |
正方形 |
正六角星 |
正五角星 |
5.標記大小
指定標記符號的大小尺寸,取值為整數(單位為像素)
6.標記面填充顏色
指定用於填充標記符面的顏色。取值在上表。
7.標記周邊顏色
指定標記符顏色或者是標記符(小圓圈、正方形、棱形、正五角星、正六角星和四個方向的三角形)周邊線條的顏色。取值在上表。
在所有的能產生線條的命令中,參數LineSepc可以定義線條的下面三個屬性:線型、標記符號、顏色進行設置。對線條的上述屬性的定義可用字符串來定義,如:plot(x,y,'-.or')
結合x和y,畫出點划線(-.),在數據點(x,y)處畫出小圓圈(o),線和標記都用紅色畫出。其中定義符(即字符串)中的字母、符號可任意組合。若沒有定義符,則畫圖命令plot自動用缺省值進行畫圖。若僅僅指定了標記符,而非線型,則plot只在數據點畫出標記符。如:plot(x,y,’d’)
例7-1
>>t = 0:pi/20:2*pi;
>>plot(t,t.*cos(t),'-.r*')
>>hold on
>>plot(exp(t/100).*sin(t-pi/2),'--mo')
>>plot(sin(t-pi),':bs')
>>hold off
圖形結果為圖7-1。
例7-2
>>plot(t,sin(2*t),'-mo', 'LineWidth',2,'MarkerEdgeColor','k',…
'MarkerFaceColor',[.49 1 .63],'MarkerSize',12)
圖形結果為圖7-2。
圖7-1 二維曲線圖 圖7-2 二維圖形的繪制
命令2 fplot
功能 在指定的范圍limits內畫出一元函數y=f(x)的圖形。其中向量x的分量分布在指定的范圍內,y是與x同型的向量,對應的分量有函數關系:y(i)=f(x(i))。若對應於x的值,y返回多個值,則y是一個矩陣,其中每列對應一個f(x)。例如,f(x)返回向量[f1(x),f2(x),f3(x)],輸入參量x=[x1;x2;x3],則函數f(x)返回矩陣
f1(x1) f2(x1) f3(x1)
f1(x2) f2(x2) f3(x2)
f1(x3) f2(x3) f3(x3)
注意一點的是,函數function必須是一個m-文件函數或者是一個包含變量x,且能用函數eval計算的字符串。例如:’sin(x)*exp(2*x)’,’[sin(x),cos(x)]’,’hump(x)’。
用法 fplot('function',limits) 在指定的范圍limits內畫出函數名為function的一元函數圖形。其中limits是一個指定x-軸范圍的向量[xmin xmax]或者是x軸和y軸的范圍的向量[xmin xmax ymin ymax]。
fplot('function',limits,LineSpec) 用指定的線型LineSpec畫出函數function。
fplot('function',limits,tol) 用相對誤差值為tol畫出函數function。相對誤差的缺省值為2e-3。
fplot('function',limits,tol,LineSpec) 用指定的相對誤差值tol和指定的線型LineSpec畫出函數function的圖形。
fplot('function',limits,n) 當n>=1,則至少畫出n+1個點(即至少把范圍limits分成n個小區間),最大步長不超過(xmax-xmin)/n。
fplot(‘function’,lims,…) 允許可選參數tol,n和LineSpec以任意組合方式輸入。
[X,Y] = fplot('function',limits,…) 返回橫坐標與縱坐標的值給變量X和Y,此時fplot不畫出圖形。若想畫出,可用命令plot(X,Y)。
[…] = plot('function',limits,tol,n,LineSpec,P1,P2,…) 允許用戶直接給函數function輸入參數P1,P2等,其中函數functiond的定義形式為
y = function(x,P1,P2,…)
若想用缺省的tol,n或LineSpec值,只需將空矩陣([ ])傳遞給函數即可。
注意:fplot采用自適應步長控制來畫出函數function的示意圖,在函數的變化激烈的區間,采用小的步長,否則采用大的步長。總之,使計算量與時間最小,圖形盡可能精確。
例7-3
>>fplot('tanh',[-2 2])
圖形結果為圖7-3。
>>subplot(2,2,1);fplot('humps',[0 1])
>>subplot(2,2,2);fplot('abs(exp(-j*x*(0:9))*ones(10,1))',[0 2*pi])
>>subplot(2,1,2);fplot('[tan(x),sin(x),cos(x)]',2*pi*[-1 1 -1 1])
圖7-3 函數畫圖 圖7-4
命令3 loglog
功能 雙對數圖形。
用法 loglog(Y) 若y為實數向量或矩陣,則結合y列向量的下標與y的列向量畫出。若y為復數向量或矩陣,則loglog(Y)等價於loglog(real(Y),imag(Y)),在loglog的其他使用形式中將忽略Y的虛數部分。
loglog(X1,Y1,X2,Y2…) 結合Xn與Yn畫出圖形。若只有Xn或Yn為矩陣,另一個為向量,行向量維數等於矩陣的列數,列向量的維數等於矩陣的行數,則loglog把矩陣按向量的方向分解成向量,再與向量結合分別畫出圖形。
loglog(X1,Y1,LineSpec1,X2,Y2,LineSpeec2…) 按順序取三個參數Xn,Yn, LineSpecn畫出線條,其中LineSpecn指定線條的線型,標記符號和顏色。用戶可以混合使用二參數和三參數形式,如:
loglog(X1,Y1,X2,Y2,LineSpec2,X3,Y3)
loglog(…,'PropertyName',PropertyValue,…) 對所有由loglog命令生成的圖形對象句柄的屬性進行設置。
h = loglog(…) 返回line圖形句柄向量,每條線對應一個句柄。
例7-4
>>x = logspace(-1,2);
>>loglog(x,10*exp(x),'-s')
>>grid on
圖7-5
命令4 semilogx
功能 x軸對數圖形。若沒有指定使用的顏色,當所畫線條較多時,semilogx將自動使用由當前軸的ColorOrder和LineStyleOrder屬性指定的顏色順序和線型順序來畫線。
用法 semilogx(Y) %對x軸的刻度求常用對數(以10為底),而y軸為線性刻度。若y為實數向量或矩陣,則結合y列向量的下標與y的列向量畫出線條;若y為復數向量或矩陣,則semilogx(Y)等價於semilogx(real(Y),imag(Y))。在semilogx的其他使用形式中,Y的虛數部分將被忽略。
semilogx(X1,Y1,X2,Y2…) %結合Xn和Yn畫出線條,若其中只有xn或yn為矩陣,另外一個為向量,行向量的維數等於矩陣的列數,列向量的維數等於矩陣的行數,則按向量的方向分解矩陣,再與向量結合,分別畫出線條。
semilogx(X1,Y1,LineSpec1X2,Y2,LineSpec2,…) %按順序取三參數Xn,Yn,LineSpecn畫線,參數LineSpecn指定使用的線型,標記符號和顏色。用戶可以混合使用二參數和三參數形式,如:
semilogx(X1,Y1,X2,Y2,LineSpec2,X3,Y3)
semilogx(…,'PropertyName',PropertyValue,…) %對所有由semilogx命令生成的圖形對象句柄的屬性進行設置
h = semilogx(…) %返回line圖形句柄向量,每條線對應一個句柄。
例7-5
>>x = 0:.1:10;
>>semilogx(x,cos(10.^x))
圖形結果為圖7-6。
命令5 semilogy
用法:參見semilogx命令。
命令6 fill
功能 用顏色填充二維多邊形。
用法 fill(X,Y,C) 用x和y中的數據生成多邊形,用c指定的顏色填充它。其中c為色圖向量或矩陣。若c是行向量,則要求c的維數等於x和y 的列數,若c為列向量,則要求c的維數等於x和y的行數。
fill(X,Y,ColorSpec) 用ColorSpec指定的顏色填充由x和y定義的多邊形
fill(X1,Y1,C1,X2,Y2,C2,…) 指定多個要填充的二維區域
fill(…,'PropertyName',PropertyValue) 允許用戶對一個patch圖形對象的某個屬性設定屬性值。
h = fill(…) 返回patch圖形對象句柄的向量,每一個patch對象對應一個句柄。
注意:
1. 若x或y是一矩陣,另一個是向量,向量應是維數與矩陣的行數相等的列向量或是維數等於矩陣列數的行向量時,函數fill將向量復制成與矩陣同型的矩陣。函數fill將矩陣x與y中列向量中的數據生成多邊形的頂點。
2. 顏色陰影類型決定於用戶在參數中列出的顏色,若用戶用ColorSpec指定顏色,命令fill生成平坦陰影模式(flat-shaded)多邊形,同時設置補片對象(patch)的FaceColor屬性為相應的RGB顏色矩陣。
3. 若用戶用參量c指定所用顏色,命令fill按坐標軸屬性Clim的比例縮小c中的元素,之后,c成為引用當前色圖的下標矩陣。
4. 若c為行向量,命令fill生成平面陰影的多邊形,c的每一元素決定由矩陣x,y的每一列定義的多邊形內的顏色,每一補片對象的FaceColor屬性被設置為'flat',x,y的每一行元素變成第n塊補片對象的Cdata屬性值,其中n為矩陣x或y中的相應的列。
5. 若c為一列向量或一矩陣,命令fill運用一線性插值法計算每一節點的顏色,以便用插值顏色填充多邊形的內部。它設置補片對象的FaceColor屬性為‘interp’,且在一列中的元素變成每一補片的Cdata屬性值。若c為一列向量,命令fill用該向量復制成需要大小的尺寸。
例7-6
>>t = (1/16:1/8:1)'*2*pi;
>>x = exp(t).*sin(t);
>>y = t.*cos(t);
>>fill(x,y,'k')
>>grid on
圖形結果為圖7-7。
命令7 zoom
功能 對二維圖形進行放大或縮小。放大或縮小會改變坐標軸范圍。
用法 zoom on 打開交互式的放大功能。當一個圖形處於交互式的放大狀態時,有兩種方法來放大圖形:
對於一鍵鼠標或二鍵,三鍵鼠標,單擊坐標軸內的任意一點,可使圖形放大一倍,這一操作可進行多次,直到matlab的最大顯示為止;對於二鍵或三鍵的鼠標,在坐標軸內單擊右鍵,可使圖形縮小一倍,這一操作可進行多次,直到還原圖形為止。對於一鍵鼠標,要想縮小圖形,需要按住鍵盤上的Shift鍵,再單擊鼠標鍵。
用鼠標拖出要放大的部分,系統將放大選定的區域。
zoom off 關閉交互式放大功能。
zoom out 將系統轉回非放大狀態,並將圖形恢復原狀。
zoom reset 系統將記住當前圖形的放大狀態,作為放大狀態的設置值。以后使用zoom out或者是雙擊鼠標時,交互式放大狀態打開,且圖形並不是返回到原狀,而是返回reset時的放大狀態。
zoom 用於切換放大的狀態:on和off。
zoom xon 只對x軸進行放大。
zoom yon 只對y軸進行放大。
zoom(factor) 用放大系數factor進行放大或縮小,而不影響交互式放大的狀態。若factor>1,系統將圖形放大factor倍,若0<factor≤1,系統將圖形放大1/factor倍。
zoom(fig, option) 指定對窗口fig中(不一定為當前窗口)的二維圖形進行放大,其中參數option為:on、off、xon、yon、reset、factor等。
命令8 meshgrid
功能 生成二元函數z = f(x,y)中x-y平面上的矩形定義域中數據點矩陣X和Y,或者是三元函數u = f(x,y,z)中立方體定義域中的數據點矩陣X,Y和Z。
用法 a:[X,Y] = meshgrid(x,y)
b:[X,Y] = meshgrid(x)
c:[X,Y,Z] = meshgrid(x,y,z)
說明 對於形式a,輸入向量x為x-y平面上矩形定義域的矩形分割線在x軸的值,向量y為x-y平面上矩形定義域的矩形分割線在y軸的值。輸出向量X為x-y平面上矩形定義域的矩形分割點的橫坐標值矩陣,輸出向量Y為x-y平面上矩形定義域的矩形分割點的縱坐標值矩陣。
對於形式b,等價於形式a:[X,Y] = meshgrid(x) = meshgrid(x,x)。
對於形式c,輸入向量x為立方體定義域的立方體分割平面在x軸上的值,輸入向量y為立方體定義域的立方體分割平面在y軸上的值,輸入向量z為立方體定義域的立方體分割平面在z軸上的值。輸出向量X為立方體定義域中分割點的x軸坐標值,Y為立方體定義域中分割點的y軸坐標值,Z為立方體定義域中分割點的z軸坐標值。
例7-7
>>x = [0.7 1.1 ]; y = [-2 3 1]; z = [2 5 3]; %分量不一定從小到大
>>[X_2d,Y_2d] = meshgrid(x,y)
>>[X_3d,Y_3d,Z_3d] = meshgrid(x,y,z)
計算結果為:
X_2d =
0.7000 1.1000
0.7000 1.1000
0.7000 1.1000
Y_2d =
-2 -2
3 3
1 1
X_3d(:,:,1) =
0.7000 1.1000
0.7000 1.1000
0.7000 1.1000
X_3d(:,:,2) =
0.7000 1.1000
0.7000 1.1000
0.7000 1.1000
X_3d(:,:,3) =
0.7000 1.1000
0.7000 1.1000
0.7000 1.1000
Y_3d(:,:,1) =
-2 -2
3 3
1 1
Y_3d(:,:,2) =
-2 -2
3 3
1 1
Y_3d(:,:,3) =
-2 -2
3 3
1 1
Z_3d(:,:,1) =
2 2
2 2
2 2
Z_3d(:,:,2) =
5 5
5 5
5 5
Z_3d(:,:,3) =
3 3
3 3
3 3
7.1.2 特殊平面圖形命令
命令1 polar
功能 畫極坐標圖。該命令接受極坐標形式的函數rho=f(θ),在笛卡兒坐標系平面上畫出該函數,且在平面上畫出極坐標形式的格柵。
用法 polar(theta,rho) 用極角theta和極徑rho畫出極坐標圖形。極角theta為從x軸到半徑的單位為弧度的向量,極徑rho為各數據點到極點的半徑向量。
polar(theta,rho,LineSpec) 參量LineSpec指定極坐標圖中線條的線型、標記符號和顏色等。
例7-8
>>t = 0:.01:2*pi;
>>polar(t,sin(3*t).*cos(2*t),'--r')
圖形結果為圖7-8。
命令2 bar
功能 二維垂直條形圖。用垂直條形顯示向量或矩陣中的值。
用法 bar(Y) 若y為向量,則分別顯示每個分量的高度,橫坐標為1到length(y);若y為矩陣,則bar把y分解成行向量,再分別畫出,橫坐標為1到size(y,1),即矩陣的行數。
bar(x,Y) 在指定的橫坐標x上畫出y,其中x為嚴格單增的向量。若y為矩陣,則bar把矩陣分解成幾個行向量,在指定的橫坐標處分別畫出。
bar(…,width) 設置條形的相對寬度和控制在一組內條形的間距。缺省值為0.8,所以,如果用戶沒有指定x,則同一組內的條形有很小的間距,若設置width為1,則同一組內的條形相互接觸。
bar(…,'style') 指定條形的排列類型。類型有“group”和“stack”,其中“group”為缺省的顯示模式。
“group”:若y為n*m階的矩陣,則bar顯示n組,每組有m個垂直條形的條形圖。
“stack”:對矩陣y的每一個行向量顯示在一個條形中,條形的高度為該行向量中的分量和。其中同一條形中的每個分量用不同的顏色顯示出來,從而可以顯示每個分量在向量中的分布。
bar(…,LineSpec) 用指定的顏色LineSpec顯示所有的條形。
[xb,yb] = bar(…) 返回用戶可用命令plot或命令patch畫出條形圖的參量xb,yb。這對用戶控制一個圖形的顯示是有用的,例如要在一個plot語句中加入裝飾性的條形圖等。
h = bar(…) 返回一個patch圖形對象句柄的向量。每一條形對應一個句柄。
例7-9
x = -2.9:0.2:2.9;
bar(x,exp(x.*sin(x)))
colormap gray
圖形結果為圖7-9。
例7-10
subplot(2,2,4)
bar(Y,1.5)
title 'Width = 1.5'
圖形結果為圖7-10。
命令3 barh
功能 二維水平條形圖。用水平條形顯示向量或矩陣中的值。
用法 barh(Y) 若y為向量,則分別顯示每個分量的高度,縱坐標為1到length(y);若y為矩陣,則bar把y分解成行向量,再分別畫出,縱坐標為1到size(y,1),即矩陣的行數。
barh(x,Y) 在指定的縱坐標x上以水平方向畫出y,其中x為嚴格單增的向量。若y為矩陣,則barh把矩陣分解成幾個行向量,在指定的縱坐標處分別畫出。
barh(…,width) 設置條形的相對寬度和控制在一組內條形的間距。缺省值為0.8,所以,如果用戶沒有指定x,則同一組內的條形有很小的間距,若設置width為1,則同一組內的條形相互接觸。
barh(…,'style') 指定條形的排列類型。類型有“group”和“stack”,其中“group”為缺省的顯示模式。
“group”:若y為n*m階的矩陣,則bar顯示n組,每組有m個水平條形的條形圖。
“stack”:對矩陣y的每一個行向量顯示在一個條形中,條形的高度為該行向量中的分量和。其中同一條形中的每個分量用不同的顏色顯示出來,從而可以顯示每個分量在向量中的分布。
barh(…,LineSpec) 用指定的顏色LineSpec顯示所有的條形。
[xb,yb] = barh(…) 返回用戶可用命令plot或命令patch畫出條形圖的參量xb,yb。這給用戶控制一個圖形的顯示是有用的,例如要在一個plot語句中加入裝飾性的條形圖等。
h = barh(…) 返回一個patch圖形對象句柄的向量。每一條形對應一個句柄。
例7-11
>>X = 1:.5:5;
>>Y = exp(X).*sin(X);
>>barh(Y,'stack')
圖形結果為圖7-11。
命令4 compass
功能 從原點畫箭頭圖。箭頭圖為一顯示起點為笛卡兒坐標系中的原點的二維或三維方向或向量的圖形,同時在坐標系中顯示圓形的分隔線。
用法 compass(X,Y) 參量x與y為同型的n維向量,則命令顯示n個箭頭,箭頭的起點為原點,箭頭的位置為[X(i),Y(i)]。
compass(Z) 參量z為n維復數向量,則命令顯示n個箭頭,箭頭起點為原點,箭頭的位置為[real(Z),imag(Z)].
compass(…,LineSpec) 用參量LineSpec指定箭頭圖的線型、標記符號、顏色等屬性。
h = compass(…) 返回line對象的句柄給h。
例7-12
Z = magic(20).*randn(20);
compass(Z)
圖形結果為圖7-12。
命令5 comet
功能 二維彗星圖。彗星圖為彗星頭(一個小圓圈)沿着數據點前進的動畫,彗星體為跟在彗星頭后面的痕跡,軌道為沿着整個函數的實線。我們要指出的是,由命令comet生成的軌跡是使用擦除模式(EraseMode)屬性的值為none,該屬性使用戶不能打印該圖形(只能得到彗星頭),且當用戶改變窗口的大小時,動畫將消失。
用法 comet(y) 彗星圖動畫顯示向量y確定的路線。
comet(x,y) 彗星圖動畫顯示向量x與y確定的路線。
comet(x,y,p) 指定彗星體的長度p*length(y),缺省的p值為0.1。
例7-13
>>t = 0:.01:2*pi;
>>x = exp(sin(2*t)).*(cos(t).^2/3);
>>y = t.*(sin(t).^2);
>>comet(x,y);
圖形結果為圖7-13。
附:擦除模式(EraseMode)屬性及屬性值:{normal}|none|xor|background
該屬性控制系統用於顯示與擦除線條對象的技術。不同的擦除模式對於生成動畫系列,即控制個別對象的重新顯示方式,對於改進外在顯示和獲得理想的效果是很必要的。
表7-4
屬性值 |
含義 |
Normal (缺省值) |
重新顯示受影響的區域,在必要的時候,進行三維分析計算,以保證所有的對象的顯示都是正確的。該模式下的圖形顯示是最精確的,不過也是最緩慢的,以下其他三種模式顯示速度較快,不過沒有執行一個完全的重顯過程,因而,圖形顯示也不是很精確的。 |
none |
當線條移動或改動時,該模式沒有擦除線條,而是仍然顯示於屏幕上。該模式下不能打印圖形,因為系統沒有存儲前一圖形的任何信息。 |
xor |
使用異或運算(xor)計算線條顏色與當前位置下的顏色,用所得結果顯示與擦除線條。該模式對於線條下面對象的顏色沒有任何破壞,只是影響到線條的當前顯示顏色而已。 |
Background |
用當前坐標軸顏色重新顯示線條的方式來擦除線條,若當前坐標軸顏色設置為none,則用圖形的背景色來代替坐標軸顏色。該模式對於處於擦除線條后面的對象來說是有損害的,不過當前線條的顏色總是最合適的。 |
命令6 errorbar
功能 沿着一曲線畫誤差棒形圖。誤差棒為數據的置信水平或者為沿着曲線的偏差。在下列參數中,若為矩陣,則按列畫出誤差棒。
用法 errorbar(Y,E) 畫出向量y,同時顯示在向量y的每一元素之上的誤差棒。誤差棒為E(i)在曲線y上面與下面的距離,所以誤差棒的長度為2*E(i)。
errorbar(X,Y,E) X,Y,E必須為同型參量。若同為向量,則畫出帶長度為2*E(i)、對稱誤差棒於曲線點(X(i),Y(i))之處;若同為矩陣,則畫出帶長度為E(i,j)、對稱誤差棒於曲面點(X(i,j),Y(i,j))之處,
errorbar(X,Y,L,U) X,Y,L,U必須為同型參量。若同為向量,則在點(X(i),Y(i))處畫出向下長為L(i),向上長為U(i)的誤差棒;若同為矩陣,則在點(X(i,j),Y(i.j))處畫出向下長為L(i,j),向上長為U(i,j)的誤差棒。
errorbar(…,LineSpec) 用LineSpec指定的線型、標記符、顏色等畫出誤差棒。
h = errorbar(…) 返回線圖形對象的句柄向量給h。
例7-14
>>X = 0:pi/10:pi;
>>Y = exp(X).*sin(X);
>>E = std(Y)*ones(size(X));
>>errorbar(X,Y,E)
圖形結果為圖7-14。
命令7 feather
功能 畫出速度向量圖。一羽毛圖在橫坐標上等距地顯示向量。用戶要表示各個向量的、相對於原點的向量分量。
用法 feather(U,V) 顯示由參量向量u與v確定的向量,其中u包含作為相對坐標系中的x成分,v包含作為相對坐標系中的y成分。
feather(Z) 顯示復數參量向量z確定的向量,等價於feather(real(Z),imag(Z))。
feather(…,LineSpec) 用參量LineSpec指定的線型、標記符號、顏色等屬性畫出羽毛圖。
例7-15
>>th = (-90:10:90)*pi/180;
>>r = 4*ones(size(th));
>>[u,v] = pol2cart(th,r);
>>feather(u,v);
圖形結果為圖7-15。
命令8 hist
功能 二維條形直方圖,可以顯示出數據的分配情形。所有向量y中的元素或者是矩陣y中的列向量中的元素是根據它們的數值范圍來分組的,每一組作為一個條形進行顯示。條形直方圖中的x軸反映了數據y中元素數值的范圍,直方圖的y軸顯示出參量y中的元素落入該組的數目。所以y軸的范圍從0到任一條形中包含元素最多的數字。直方圖為一patch圖形對象,若想改變圖形的顏色,可以對patch對象的屬性進行設置。缺省時,圖形顏色是由當前色圖進行控制,當前色圖的第一個顏色為直方圖的顏色。
用法 n = hist(Y) 把向量y中的元素放入等距的10個條形中,且返回每一個條形中的元素個數。若y為矩陣,則該命令按列對y進行處理。
n = hist(Y,x) 參量x為向量,把y中元素放到m(m=length(x))個由x中元素指定的位置為中心的條形中。
n = hist(Y,nbins) 參量nbins為標量,用於指定條形的數目。
[n,xout] = hist(…) 返回向量n與包含頻率計數與條形的位置向量xout,用戶可以用命令bar(xout,n)畫出條形直方圖。
例7-16
>>x = -5:0.1:5;
>>y = randn(1000,1);
>>hist(y,x)
圖形結果為圖7-16。
命令9 histc
功能 直方圖記數
用法 n = histc(x,edges) 統計向量x中、落入向量edges(元素必須為單調的非減的)各個元素之間的元素個數。輸出參量n為一與向量edges同維的向量。其中若有edges(k)>=x(i)>=edges(k+1),則n(k)增加1。X中超出向量edges規定的范圍的元素將不被統計。參量edges中可使用-inf與inf,用於包括向量x中非NaN的元素。若x為一矩陣,則對x的每一列進行上述操作。
n = histc(x,edges,dim) 對多維矩陣的第dim維進行統計。
[n,bin] = histc(…) n結果同上,同時返回矩陣下標bin。若x為向量,n(k) = sum(bin == k)。對於超出范圍的數值,bin為零值。
命令10 rose
功能 畫角度直方圖。該直方圖是一個顯示所給數據的變化范圍內數據的分布情形的極坐標圖,所給數據分成不同的組。每一組作為一小扇形進行顯示。
用法 rose(theta) 畫一角度直方圖,顯示參數theta的數據在20個區間或更少的區間內的分布。向量theta中的角度單位為弧度,用於確定每一區間與原點的角度。每一區間的長度反映出輸入參量的元素落入一區間的個數。
rose(theta,x) 用參量x指定每一區間內的元素與區間的位置,length(x)等於每一區間內元素的個數與每一區間位置角度的中間角度。例如,若x為一5維向量,rose命令分配參量theta中的元素為5部分,每一部分的角度中線由x指定。
rose(theta,nbins) 於區間 [0,2*pi] 內畫出nbins個等距的小扇形。缺省值為20。
[tout,rout] = rose(…) 返回向量tout與rout,可以用polar(tout,rout)畫出圖形。該命令沒有畫任何的圖形。
例7-17
>>theta = 3*pi*randn(1,30);
>>rose(theta)
圖形結果為圖7-17。
命令11 stairs
功能 畫二維階梯圖,這種圖對與時間有關的數字樣本系統的作圖很有用處。
用法 stairs(Y) 用參量y的元素畫一階梯圖。若y為向量,則橫坐標x的范圍從1到m=length(y),若y為矩陣,則對y的每一行畫一階梯圖,其中x的范圍從1到y的列數m。
stairs(X,Y) 結合x與y畫階梯圖。其中要求x與y為同型的向量或矩陣。此外,x可以為行向量或為列向量,且y為有m=length(x)行的矩陣。
stairs(…,LineSpec) 用參數LineSpec指定的線型、標記符號和顏色畫階梯圖。
[xb,yb] = stairs(Y) 該命令沒有畫圖,而是返回可以用命令plot畫出參量y的階梯圖的向量xb與yb。
[xb,yb] = stairs(X,Y) 該命令沒有畫圖,而是返回可以用命令plot畫出參量x,y的階梯圖的向量xb與yb。
例7-18
>>x = 0:.25:10;
>>stairs(x,exp(sin(x.^2)))
圖形結果為圖7-18。
命令12 stem
功能 畫二維離散數據的柄形圖。該圖用線條顯示數據點與x軸的距離,一小圓圈(缺省標記)或用指定的其他標記符號與線條相連,在y軸上標記數據點的值。
用法 stem(Y) 按y元素的順序畫出柄形圖,在x軸上,柄與柄之間的距離相等;若y為矩陣,則把y分成幾個行向量,在同一橫坐標的位置上畫出一個行向量的柄圖。
stem(X,Y) 在橫坐標x上畫出列向量y的柄形圖 。其中x與y為同型的向量或矩陣,此外,x可以為行向量或列向量,而y為有m=length(x)行的矩陣。
stem(…,'fill') 指定是否對柄形圖末端的小圓圈填充顏色。
stem(…,LineSpec) 用參數LineSpec指定線型,標記符號和柄圖末端的小圓圈的顏色畫柄圖。
h = stem(…) 返回柄形圖的line圖形對象句柄向量。
例7-19
>>x = linspace(0,2,10);
>>stem(exp(-x.^2),'fill','-.')
圖形結果為圖7-19。
命令13 stem3
功能 畫三維離散數據的柄形圖。該圖用一線段顯示數據離開xy平面的高度,在線段的末端用一小圓圈(缺省記號)或其他的標記符號表示數據的高度。
格式 stem3(Z) 用柄形圖顯示z中數據與xy平面的高度。若z為一行向量,則x與y將自動生成,stem3將在與x軸平行的方向上等距的位置上畫出z的元素;若y為列向量,stem3將在與y軸平行的方向上等距的位置上畫出z的元素。
stem3(X,Y,Z) 在參數x與y指定的位置上畫出z的元素,其中x,y,z必須為同型的向量或矩陣。
stem3(…,'fill') 指定是否要填充柄形圖末端小圓圈。
stem3(…,LineSpec) 指定線型,標記符號和末端小圓圈的顏色。
h = stem3(…) 返回柄形圖的line圖形對象句柄。
例7-20
[X,Y,Z] = peaks(20);
stem3(X,Y,Z,’r*')
圖形結果為圖7-20。
命令14 pie
功能 餅形圖
格式 pie(X) 用x中的數據畫一餅形圖,x中的每一元素代表餅形圖中的一部分。X中元素X(i)所代表的扇形大小通過X(i)/sum(X)的大小來決定。若有sum(X)=1,則x中元素就直接指定了所在部分的大小;若sum(X)<1,則畫出一不完整的餅形圖。
pie(X,explode) 從餅形圖中分離出一部分,explode為元素為零或非零的、與x相對應的向量或矩陣。與explode的非零值對應的部分將從餅形圖中心分離出來。explode必須與x同型。
h = pie(…) 返回一patch與text的圖形對象句柄向量h。
例7-21
>>x = [1 3 0.5 2.5 2];
>>explode = [0 1 0 0 0];
>>pie(x,explode)
圖形結果為圖7-21。
7.1.3 二維圖形注釋命令
命令1 grid
功能 給二維或三維圖形的坐標面增加分隔線。該命令會對當前坐標軸的Xgrid,Ygrid,Zgrid的屬性有影響。
用法 grid on 給當前的坐標軸增加分隔線。
grid off 從當前的坐標軸中去掉分隔線。
grid 轉換分隔線的顯示與否的狀態。
grid(axes_handle,on|off) 對指定的坐標軸axes_handle是否顯示分隔線。
命令2 gtext
功能 在當前二維圖形中用鼠標放置文字。當光標進入圖形窗口時,會變成一個大十字,表明系統正等待用戶的動作。
用法 gtext('string') 當光標位於一個圖形窗口內時,等待用戶單擊鼠標或鍵盤。若按下鼠標或鍵盤,則在光標的位置放置給定的文字“string”
h = gtext('string') 當用戶在鼠標指定的位置放置文字“string”后,返回一個text圖形對象句柄給h。
命令3 legend
功能 在圖形上添加圖例。該命令對有多種圖形對象類型(線條圖,條形圖,餅形圖等)的窗口中顯示一個圖例。對於每一線條,圖例會在用戶給定的文字標簽旁顯示線條的線型,標記符號和顏色等。當所畫的是區域(patch或surface對象)時,圖例會在文字旁顯示表面顏色。Matlab在一個坐標軸中僅僅顯示一個圖例。圖例的位置有幾個因素決定,像遮擋的對象等,用戶可以用鼠標拖動圖例到恰當的位置,雙擊標簽可以進入標簽編輯狀態。
用法 legend('string1','string2',…) 用指定的文字string在當前坐標軸中對所給數據的每一部分顯示一個圖例。
legend(h,'string1','string2',…) 用指定的文字string在一個包含於句柄向量h中的圖形顯示圖例。用給定的數據對相應的圖形對象加上圖例。
legend(string_matrix) 用字符矩陣參量string_matrix的每一行字符串作為標簽。
legend(h,string_matrix) 用字符矩陣參量string_matrix的每一行字符串作為標簽給包含於句柄向量h中的相應的圖形對象加標簽。
legend(axes_handle,…) 給由句柄axes_handle指定的坐標軸顯示圖例。
legend('off') 從當前的坐標軸,或是由axes-handle指定的坐標軸中除掉圖例。
legend(axes_handle,'off') 從由axes_handle指定的坐標軸中除掉圖例。
legend_handle = legend 返回當前坐標軸中的圖例句柄,若坐標軸中沒有圖例存在,則返回空向量。
legend 對當前圖形中所有的圖例進行刷新。
legend(legend_handle) 對由句柄legend_handle指定的圖例進行刷新。
legend(…,pos) 在指定的位置pos放置圖例見表7-5。
表7-5
Pos取值 |
pos=-1 |
pos=0 |
Pos=1 |
圖例位置 |
坐標軸之外的右邊 |
坐標軸之內,有可能遮擋部分圖形 |
坐標軸的右上角(缺省位置) |
Pos取值 |
pos=2 |
pos=3 |
pos=4 |
圖例位置 |
坐標軸的左上角 |
在坐標軸的左下角 |
坐標軸的右下角 |
h = legend(…) 返回圖例的句柄向量。
[legend_handle,object_handles] = legend(…) 返回圖例句柄,該句柄為坐標軸定義於圖例中的圖形對象、line對象、text對象的句柄。這些句柄允許用戶對每個對象進行詳細的操作。
例7-22
>>x = -pi:pi/20:pi;
>>plot(x,(cos(x)).^2,'rd',x,asin(x),'-.b')
>>h = legend('cos2x','asin',2);
圖形結果為圖7-22。
命令4 title
功能 給當前軸加上標題。每個axes圖形對象可以有一個標題。標題定位於axes的上方正中央。
用法 title('string') 在當前坐標軸上方正中央放置字符串string作為標題
title(fname) 先執行能返回字符串的函數fname,然后在當前軸上方正中央放置返回的字符串作為標題
title(…,'PropertyName',PropertyValue,…) 對由命令title生成的text圖形對象的屬性進行設置
h = title(…) 返回作為標題的text對象句柄。
命令5 text
功能 在當前軸中創建text對象。函數text是創建text圖形句柄的低級函數。可用該函數在圖形中指定的位置上顯示字符串。
用法 text(x,y,'string')在圖形中指定的位置(x,y)上顯示字符串string
text(x,y,z,'string') 在三維圖形空間中的指定位置(x,y,z)上顯示字符串string
text(x,y,z,’string’.'PropertyName',PropertyValue…) 對引號中的文字string定位於用坐標軸指定的位置,且對指定的屬性進行設置。表7-6給出文字屬性名、含義及屬性值。
表7-6
屬性名 |
屬性說明 |
屬性值 |
定義字符串 |
||
Editing |
能否對文字進行編輯 |
有效值:on、off 缺省值:off |
Interpretation |
TeX字符是否可用 |
有效值:tex、none 缺省值:tex |
String |
字符串(包括TeX字符串) |
有效值:可見字符串 |
放置字符串 |
||
Extent |
text對象的范圍(位置與大小) |
有效值:[left, bottom, width, height] |
HorizontalAlignment |
文字水平方向的對齊方式 |
有效值:left(文本外框左邊對齊,缺省對齊方式)、center(文本外框中間對齊)、right(文本外框右邊對齊) 缺省值:left |
Position |
文字范圍的位置 |
有效值:[x,y,z]直角坐標系 缺省值:[](空矩陣) |
Rotation |
文字對象的方位角度 |
有效值:標量(單位為度) 缺省值:0 |
Units |
文字范圍與位置的單位 |
有效值:pixels (屏幕上的像素點)、normalized (把屏幕看成一個長、寬為1的矩形)、inches(英寸)、centimeters(厘米)、points (圖象點)、data 缺省值:data |
VerticalAlignment |
文字垂直方向的對齊方式 |
有效值:top (文本外框頂上對齊)、cap(文本字符頂上對齊)、middle(文本外框中間對齊)、baseline(文本字符底線齊)、bottom(文本外框底線對齊) 缺省值:middle |
指定文字字體 |
||
FontAngle |
設置斜體文字模式 |
有效值:normal(正常字體)、italic(斜體字)、oblique(斜角字) 缺省值:normal |
FontName |
設置文字字體名稱 |
有效值:用戶系統支持的字體名或者字符串FixedWidth。 缺省值為 Helvetica |
FontSize |
文字字體大小 |
有效值:結合字體單位的數值 缺省值為:10 points |
FontUnits |
設置屬性FontSize的單位 |
有效值:points (1點=1/72英寸)、normalized(把父對象坐標軸作為一單位長的一個整體;當改變坐標軸的尺寸時,系統會自動改變字體的大小)、inches (英寸)、Centimeters(厘米)、Pixels(像素) 缺省值:points |
FontWeight |
設置文字字體的粗細 |
有效值:light(細字體)、normal(正常字體)、demi(黑體字)、Bold(黑體字) 缺省值:normal |
控制文字外觀 |
||
Clipping |
設置坐標軸中矩形的剪輯模式 |
有效值:on、off on:當文本超出坐標軸的矩形時,超出的部分不顯示; off:當文本超出坐標軸的矩形時,超出的部分顯示。 缺省值:off |
EraseMode |
設置顯示與擦除文字的模式。這些模式對生成動畫系列與改進文字的顯示效果很有好處。 |
有效值:normal、none、 xor、 background 缺省值:normal |
SelectionHighlight |
設置選中文字是否突出顯示 |
有效值:on、off 缺省值:on |
Visible |
設置文字是否可見 |
有效值:on、off 缺省值:on |
Color |
設置文字顏色 |
有效的顏色值:ColorSpec |
控制對文字對象的訪問 |
||
HandleVisibility |
設置文字對象句柄對其他函數是否可見 |
有效值:on、callback、off 缺省值:on |
HitTest |
設置文字對象能否成為當前對象(見圖形CurrentObject屬性) |
有效值:on、off 缺省值:on |
文字對象的一般信息 |
||
Children |
文字對象的子對象(文字對象沒有子對象) |
有效值:[](即空矩陣) |
Parent |
文字對象的父對象(通常為axes對象) |
有效值:axes的句柄 |
Seleted |
設置文字是否顯示出“選中”狀態 |
有效值:on、off 缺省值:off |
Tag |
設置用戶指定的標簽 |
有效值:任何字符串 缺省值:’’(即空字符串) |
Type |
設置圖形對象的類型(只讀類型) |
有效值:字符串’text’ |
UserData |
設置用戶指定數據 |
有效值:任何矩陣 缺省值:[](即空矩陣) |
控制回調例行執行程序 |
||
BusyAction |
設置如何處理對文字回調過程中斷的句柄 |
有效值:cancel、queue 缺省值:queue |
ButtonDownFcn |
設置當鼠標在文字上單擊時,程序做出的反應(即執行回調程序) |
有效值:字符串 缺省值:' '(空字符串) |
CreateFcn |
設置當文字被創建時,程序做出的反應(即執行的回調程序) |
有效值:字符串 缺省值:' '(空字符串) |
DeleteFcn |
設置當文字被刪除(通過關閉或刪除操作)時,程序做出的反應(即執行的回調程序) |
有效值:字符串 缺省值:' '(空字符串) |
Interruptible |
設置回調過程是否可中斷 |
有效值:on、off 缺省值:on(能中斷) |
UIContextMenu |
設置與文字相關的菜單項 |
有效值:用戶相關菜單句柄 |
h = text(…) 返回文字對象句柄的列向量,每一對象對應一句柄。該命令的其他使用形式中,將隨意地返回這個輸出參量。
例7-23
>>plot(0:pi/20:2*pi,sin(0:pi/20:2*pi))
>>text(pi,0,’Zeros Point’)
>>grid on
圖形結果為圖7-23。
命令6 xlabel、ylabel
功能 給x、y軸貼上標簽
用法 xlabel('string')、 ylabel(‘string’) 給當前軸對象中的x、y軸貼標簽;注意:若再次執行xlabel或ylabel命令,則新的標簽會覆蓋舊的標簽。
xlabel(fname)、ylabel(fname) 先執行函數fname,其返回一個字符串,然后在x、y軸旁邊顯示出來;
xlabel(…,'PropertyName',PropertyValue,…)、ylabel(…,’PropertyName’, PropertyValue)指定軸對象中的要控制的屬性名和要改變的屬性值,這些都是由xlabel或ylabel創建的text圖形對象的成對值;
h = xlabel(…)、h = ylabel(…)返回作為標簽的text對象的句柄。