1. 程式人生 > >matlab 高階繪圖函式

matlab 高階繪圖函式

  matlab高層繪圖函式即是指Matlab提供了一系列的繪圖函式,這些繪圖函式使得使用者不需要過多的考慮繪圖的細節,只需要給出一些基本引數就能得到所需圖形。與高階繪圖函式的相對的是,低階繪圖函式,這我們放在在後面探討,這一篇部落格我們就來探討一下matlab高階繪圖函式。

plot 函式

(1)當x和y是同維矩陣時,配對的x、y按對應列元素為橫、 縱座標分別繪製曲線,曲線條數等於矩陣的列數。例如, 在同一座標中繪製3條幅值不同的正弦曲線,命令為 :

x=0:pi/10:2*pi;
y=sin(x);
plot([x;x;x]',[y;y*2;y*3]') 

(2)當x是向量,y是有一維與x同維的矩陣時,則繪製出多根 曲線,曲線條數等於y矩陣的另一維數

,x被作為這些曲線 共同的橫座標。例如,在同一座標中繪製3條幅值不同的 正弦曲線,命令也可以寫成:

x=0:pi/10:2*pi;
y=sin(x);
plot(x,[y;y*2;y*3]) 

(3)當plot函式只有一個輸入引數時,即plot(y) 時:

  • 若y是實型向量,則以該向量元素的下標為橫座標、元素值為縱座標畫出一條連續曲線;
  • 若y是複數向量,則分別以向量元素實部和虛部為橫、縱座標繪製一條曲線。

  • 若y是實矩陣,則按列繪製每列元素值相對其下標的曲線, 曲線條數等於輸入引數矩陣的列數

  • 若y是複數矩陣,則按列分別以元素實部和虛部為橫、縱座標繪製多條曲線。
    (4)當plot函式有多個輸入引數,且都為向量時,即 plot(x1,y1,x2,y2,…,xn,yn)
    其中,x1和y1,x2和y2,……,xn和yn分別組成一組向量對,每一組向量對的長度可以不同。每一向量對可以繪製出一條曲線,這樣可以在同一座標內繪製出多條曲線。 例如,在同一座標中繪製3條幅值不同的正弦曲線,命令也可以寫成:
x=0:pi/10:2*pi;
y=sin(x);
plot(x,y,x,y*2,x,y*3) 

plotyy 函式

  繪製出具有不同縱座標標度的兩個圖形,可以使用plotyy 繪圖函式。這種圖形有利於圖形資料的對比分析。 plotyy(x1,y1,x2,y2) , 其中,x1和y1對應一條曲線,x2和y2對應另一條曲線。 橫座標的標度相同,縱座標有兩個,左縱座標用於x1、y1 資料對,右縱座標用於x2、y2資料對。

clear all;
x=0:pi/100:2*pi;
y1=0.2*exp(-0.5*x).*cos(4*pi*x);
y2=1.5*exp(-0.5*x).*cos(pi*x);
plotyy(x,y1,x,y2); 

這裡寫圖片描述

fplot函式

  使用plot函式繪圖時,都是等間隔取點。fplot函式可自適 應地對函式進行取樣,呼叫格式為 :fplot(fname,lims,tol,optional)

  • fname為函式名,以字串形式出現。它可以是由多個分量函式構成的行向量,分量函式可以是函式的直接字串,也可以是內部函式名或函式檔名,但自變數都必須為x
  • lims為x、y的取值範圍,以行向量形式出現, 取二元向量[xmin,xmax]時,x軸的範圍被人為確定,取四元向量[xmin,xmax,ymin,ymax]時,x、y軸的範 圍被人為確定。
  • tol為相對允許誤差,其系統預設值為2e-3 。
  • optional引數與plot函式相同,即一些圖形樣式控制,我們後面再談。
fplot('sin(x^2)/x',[-10,10],1e-4) 

subplot函式

  在實際應用中,經常需要在一個圖形窗 口內繪製若干個獨立的圖形,這就需要對圖形視窗進行分割。分割後的圖形視窗由若干個繪圖區組成,每一個繪圖區可以建立獨立的座標系並繪製圖形。同一 圖形視窗中的不同圖形稱為子圖。 使用subplot(m,n,p)函式將當前 圖形視窗分成m × n個繪圖區,即 每行n個,共m行,區號按行優先編號,且選定第 p個區為當前活動區。在每一個繪圖區允許以不同 的座標系單獨繪製圖形。

x=-3:0.1:3;
subplot(2,2,[1 3]);
fplot('x-cos(x^3)-sin(2*x^2)',[-3,3]); 
xlabel('(a)');

subplot(2,2,2);
y2 = sin(2.*x.^2);
plot(x,y2);
xlabel('(b)');
axis([-3 3 -1.2 1.2]);

subplot(2,2,4);
y3 = cos(x.^3);
plot(x,y3);
xlabel('(c)');
axis([-3 3 -1.2 1.2]);
grid on; 

這裡寫圖片描述

當然,值得注意的是,如果想在同一個畫布上進行圖形疊加,我們可以用hold on /off來進行控制。
e.g.

x=0:pi/100:2*pi;
y1=0.2*exp(-0.5*x).*cos(4*pi*x);
plot(x,y1);
hold on
y2=1.5*exp(-0.5*x).*cos(pi*x);
plot(x,y2);
hold off 

對數座標系繪圖

  • semilogx(x1,y1,選項1,x2,y2,選項2,……)

  • semilogy(x1,y1,選項1,x2,y2,選項2,……)

  • loglog(x1,y1,選項1,x2,y2,選項2,……)
      semilogx函式使用半對數座標,x軸為常 用對數刻度,而y軸仍保持線性刻度;semilogy函式也使用半對數座標,y軸為常用對數刻度,而x軸仍保持線性刻度;loglog函式使用全對數座標,x、y軸均採用常用對數刻度。

極座標系繪圖

  極座標圖用一個夾角和一段相對中心點—極點的距離來表示資料。MATLAB中用polar函式來繪製極座標圖,其呼叫格式為: polar(theta,rho,option) 其中,theta為極座標極角,rho為極座標矢徑,option的內容與plot函式相似,放在後面探討。

// 阿基米德螺旋線
t=0:pi/20:6*pi;
a=2;b=3;
r=a+b*t;
polar(t,r,'-*'); 

這裡寫圖片描述

二維統計分析圖

bar函式

  bar函式的基本用法與plot函式相似,其呼叫格式為 bar(x,width,style)。當x是m × n階的矩陣時,繪製的條形圖以分組或堆積的 形式表現。矩陣中每一行元素繪製在一組中,每一列元素 繪製在每組中相對應的位置上。

  • width設定條形的 相對寬度和控制在一組內條形的間距,預設值為0.8;
  • style指定條形的排列模式,型別有’group’(分組)和 ‘stack’(堆積),預設時採用’group’模式。

來個例子:
這裡寫圖片描述

x=[51,82,34,47;67,78,68,90;78,85,65,50]';
subplot(1,2,1);
bar(x,'group');
title('Group');
axis([0 5 0 100]);
subplot(1,2,2);
barh(x,'stack');
title('Stack'); 

這裡寫圖片描述
另外還有不少類似函式,如:

  • bar函式繪製柱形圖
  • barh函式繪製水平條形圖
  • stem函式繪製杆圖
  • errorbar函式繪製誤差條圖

pie函式

  餅圖能反映每一數值相對於總數值的大小。MATLAB中繪 制餅圖的函式是pie,其呼叫格式為 pie(x,explode) pie函式使用x中的資料繪製一個餅圖,x可以是向量或矩陣。explode是與x同等大小的向量或矩陣,與explode的 非零值對應的部分將從餅圖中心分離出來,預設explode 時,餅圖是一個整體。

scatter函式

  散點圖是資料點在直角座標系平面上的分佈圖。MATLAB 中繪製散點圖的函式是scatter,其呼叫格式為: scatter(x,y,s,c,'filled')

  • x、y、s和c為同等大小的向量。x和y用於定位資料點;
  • s指定繪圖點的大小,s也可以是一個標量,則所 有資料點同等大小;
  • c指定繪圖所使用的色彩,c也可以是 一個標量,所有資料點使用同一種顏色;
  • ‘filled’表示填充 繪圖點,預設時,資料點是空心的。

實心圖

fill函式

  實心圖是將資料的起點和終點連成多邊形,並填充顏色。 繪製實心圖的函式是fill,其呼叫格式為 fill(x1,y1,選項1,x2,y2,選項2,…) 。fill函式按向量元素下標漸增次序依次用直線段連線x、y 對應元素定義的資料點。假若這樣連線所得折線不封閉, 那麼MATLAB將自動把該折線的首尾連線起來,構成封閉多邊形,然後將多邊形內部塗滿指定的顏色。

n=6;
st=0:2*pi/n;:2*pi;
t=[st,st(1)]; %資料向量的首尾重合,使圖形封閉
x=sin(t);
y=cos(t);
fill(x,y,'b');
axis([-1.5 1.5 -1.5 1.5])

這裡寫圖片描述

複數向量圖

compass函式 和 feather函式

  MATLAB中除可以用plot函式繪製複數向量圖外,還可用 compass和feather函式,compass函式繪製圍繞原點的羅盤圖,feather函式繪製圍繞x軸的羽毛圖,其呼叫格式 為

 compass(z);
 compass(u,v);
 feather(z);
 feather(u,v);
 //z為複數向量,u、v分別為複數向量的實部和虛部 

舉個例子:

theta = (-120:10:60)*pi/180;
r = 2*ones(size(theta));
[u,v] = pol2cart(theta,r);
//把極座標或圓柱座標轉換為笛卡兒座標

subplot(1,2,1);
compass(u,v);
title('compass');

subplot(1,2,2);
feather(u,v);
title('feather')

影象精細控制

設定曲線樣式

線型選擇

這裡寫圖片描述

曲線顏色

這裡寫圖片描述

點標記符

這裡寫圖片描述

圖形標註

在繪製圖形的同時,可以對圖形加上一些說明,如圖形名稱、座標軸 說明、圖形某一部分的含義等,這些操作稱為新增圖形標註。

  • title(圖形名稱)
  • xlabel(x軸說明)
  • ylabel(y軸說明)
  • text(x,y,圖形說明)//指定座標位置新增文字
  • gtext(圖形說明)執行該命令時,十字座標游標自動跟隨滑鼠移動,單擊滑鼠即 可將文字放置在十字游標處
  • legend(圖例1,圖例2,……)

  上述函式中的說明文字,除使用標準的ASCII字元外,還可使用LaTeX(LaTeX是一種十分流行的數學排版軟體) 格式的控制字元,這樣就可以在圖形上新增希臘字母、數學符號、公式等內容。在MATLAB支援的LaTeX字串中, 用\bf、\it、\rm控制字元分別定義黑體、斜體和正體字元, 受LaTeX字串控制部分要加大括號{}括起來。
  如果想在某個字元後面加一個上標,則可以在該字元後面 跟一個^引導的字串。例如e^{axt}對應的標註效果為 eaxt,而e^axt對應的效果為eaxt。類似地可以定義下標,下標是由引導的,如X{12}對應 的標註效果為X12。

x=0:pi/100:2*pi;
y1=exp(-0.5*x);
y2=exp(-0.5*x).*sin(2*x);
plot(x,y1,x,y2);
title('x from 0 to 2{\pi}'); %加圖形標題 
xlabel('Variable X'); %加X軸說明
ylabel('Variable Y'); %加Y軸說明
text(1.5,0.5,'曲線y1=e^{-0.5x}'); %在指定位置新增圖形說明
text(3,-0.1,'曲線y2=e^{-0.5x}*sin(2x)'); 
legend('y1','y2')

這裡寫圖片描述

座標控制

axis([xmin xmax ymin ymax]);

其他用法:
1. axis auto:使用預設設定
2. axis equal:縱、橫座標軸採用等長刻度
3. axis square:產生正方形座標系(預設為矩形)
4. axis on/off:顯示/取消座標軸

說明:給座標加網格線用grid命令來控制,加邊框用box命令來控制。grid on/off命令控制是畫還是不畫網格線,box on/off命令控制是加還是不加邊框線。