Matlab中的plot函式
本節介紹MATLAB 的兩種基本繪圖功能:二維平面圖形和三維立體圖形。
5.1 二維平面圖形
5.1.1 基本圖形函式
plot 是繪製二維圖形的最基本函式,它是針對向量或矩陣的列來繪製曲線的。也就是
說,使用plot 函式之前,必須首先定義好曲線上每一點的x 及y 座標,常用格式為:
(1)plot(x) 當x 為一向量時,以x 元素的值為縱座標,x 的序號為橫座標值繪製
曲線。當x 為一實矩陣時,則以其序號為橫座標,按列繪製每列元素值相對於其序號的曲
線,
當x 為m× n 矩陣時,就由n 條曲線。
(2)plot(x,y) 以x 元素為橫座標值,y 元素為縱座標值繪製曲線。
(3)plot(x,y1,x,y2,…) 以公共的x 元素為橫座標值,以y1,y2,… 元素為縱座標值繪
制多條曲線。
例5.1.1 畫出一條正弦曲線和一條餘弦曲線。
>> x=0:pi/10:2*pi;
>> y1=sin(x);
>> y2=cos(x);
>> plot(x,y1,x,y2)
圖5.1.1 函式plot 繪製的正弦曲線
在繪製曲線圖形時,常常採用多種顏色或線型來區分不同的資料組,MATLAB 軟體專
門提供了這方面的引數選項(見表5.1.1),我們只要在每個座標後加上相關字串,就可
實
現它們的功能。
- 2 -
表5.1.1 繪圖參數列
色彩字元顏色線型字元線型格式標記符號資料點形式標記符號資料點形式
y 黃- 實線. 點< 小於號
m 紫: 點線o 圓s 正方形
c 青-. 點劃線x 叉號d 菱形
r 紅- - 虛線+ 加號h 六角星
g 綠* 星號p 五角星
b 藍v 向下三角形
w 白^ 向上三角形
k 黑> 大於號
例如,在上例中輸入
>> plot(x,y1,'r+-',x,y2,'k*:')
則得圖5.1.2
圖5.1.2 使用不同標記的plot 函式繪製的正弦曲線
5.1.2 圖形修飾
MATLAB 軟體為使用者提供了一些特殊的圖形函式,用於修飾已經繪製好的圖形。
表5.1.2 圖形修飾函式表
函式含義
grid on (/off) 給當前圖形標記新增(取消)網路
xlable(‘string’) 標記橫座標
ylabel(‘string’) 標記縱座標
title(‘string’) 給圖形新增標題
text(x,y,’string’) 在圖形的任意位置增加說明性文字資訊
gtext(‘string’) 利用滑鼠新增說明性文字資訊
axis([xmin xmax ymin ymax]) 設定座標軸的最小最大值
- 3 -
例5.1.2 給例5.1.1 的圖形中加入網路和標記。(見圖5.1.3 和5.1.4)
>> x=0:pi/10:2*pi;
>> y1=sin(x);
>> y2=cos(x);
>> plot(x,y1,x,y2)
>> grid on
>> xlabel('independent variable X')
>> ylabel('Dependent Variable Y1 & Y2')
>> title('Sine and Cosine Curve')
>> text(1.5,0.3,'cos(x)')
>> gtext('sin(x)')
>> axis([0 2*pi -0.9 0.9])
圖5.1.3 使用了圖形修飾的plot 函式繪製的正弦曲線
5.1.3 圖形的比較顯示
在一般預設的情況下,MATLAB 每次使用plot 函式進行圖形繪製,將重新產生一個圖
形視窗。但有時希望後續的圖形能夠和前面所繪製的圖形進行比較。一般來說有兩種方法
:
一是採用hold on(/off)命令,將新產生的圖形曲線疊加到已有的圖形上;二是採用
subplot(m,n,k)函式,將圖形視窗分隔成n m× 個子圖,並選擇第k 個子圖作為當前圖形
,然
後在同一個檢視視窗中畫出多個小圖形。
例5.1.3 在同一視窗中繪製線段。(見圖5.1.5)
>> x=0:pi/10:2*pi;
>> y1=sin(x);
>> y2=cos(x);
>> y3=x;
- 4 -
>> y4=log(x);
>> plot(x,y1,x,y2)
>> hold on
>> plot(x,y3)
>> plot(x,y4)
>> hold off
例5.1.4 在多個視窗中繪製圖形。(見圖5.1.6)
>> x=0:pi/10:2*pi;
>> y1=sin(x);
>> y2=cos(x);
>> y3=exp(x);
>> y4=log(x);
>> subplot(2,2,1);
>> plot(x,y1);
>> subplot(2,2,2);
>> plot(x,y2);
>> subplot(2,2,3);
>> plot(x,y3);
>> subplot(2,2,4);
>> plot(x,y4);
[說明] (1)子視窗的序號按行由上往下,按列從左向右編號。
(2)如果不用指令clf 清除,以後圖形將被繪製在子圖形視窗中。
圖5.1.4 設定座標軸最大最小值的正弦曲線
- 5 -
圖5.1.5 圖形的比較顯示(曲線疊加方法)
圖5.1.6 圖形的比較顯示(圖形視窗分割方法)
- 6 -
5.2 三維立體圖形
5.2.1 三維曲線圖
與二維圖形相對應,MATLAB 提供了plot3 函式,可以在三維空間中繪製三維曲線,
它的格式類似於plot,不過多了z 方向的資料。plot3 的呼叫格式為:
plot3(x1,y1,z1,x2,y2,z2,...)
其中x1,y1,z1,x2,y2,z2,…等分別為維數相同的向量,分別儲存著曲線的三個座標值,該
函式
的使用方式和plot 類似,也可以採用多種的顏色或線型(見表5.1.1)來區分不同的資料
組,
只需在每組變數後面加上相關字串即可實現該功能。
例5.2.1 繪製方程x=t
y=sin(t)
z=cos(t)
在t=[0,2*pi]上
的空間方程。(見圖5.2.1)
>> clf
>> x=0:pi/10:2*pi;
>> y1=sin(x);
>> y2=cos(x);
>> plot3(y1,y2,x,'m:p')
>> grid on
>> xlabel('Dependent Variable Y1')
>> ylabel('Dependent Variable Y2')
>> zlabel('Independent Variable X')
>> title('Sine and Cosine Curve')
圖5.2.1 函式plot 繪製的三維曲線圖
- 7 -
5.2.2 三維曲面圖
如果要畫一個三維的曲面,可以使用mesh(X,Y,Z)或surf(X,Y,Z)函式來實現。
mesh 函式為資料點繪製網格線,圖形中的每一個已知點和其附近的點用直線連線。surf
函式和mesh 的用法類似,但它可以畫出著色表面圖,圖形中的每一個已知點與其相鄰點以
平面連線。
為方便測試立體繪圖,MATLAB 提供了一個peaks 函式,它可以產生一個的高
斯分佈矩陣,其生成方程是
N N ×
z=3*(1-x).^2.*exp(-(x.^2)-(y+1).^2)-10*(x/5-x.^3-y.^5).*exp(-x.^2-y.^2)-1/3*ex
p(-(x+1).^2-y.^2)
對應的圖形是一個凹凸有致的曲面,包含了三個區域性極大點及三個區域性極小點。
下面使用peaks 函式來比較一下mesh 和surf 的區別。
例5.2.2 分別用mesh 函式和surf 函式繪製高斯矩陣的曲面。
>> z=peaks(40);
>> mesh(z);
>> surf(z);
圖5.2.2 mesh 函式繪製的三維曲面圖
- 8 -
圖5.2.3 surf 函式繪製的著色表面圖
在曲面繪圖中,另一個常用的函式是meshgrid 函式,其一般引用格式是:
[X, Y]=meshgrid (x, y)
其中x 和y 是向量,通過meshgrid 函式就可將x 和y 指定的區域轉換成為矩陣X 和Y。
這樣我們在繪圖時就可以先用meshgrid 函式產生在x-y 平面上的二維的網格資料,再以一
組z 軸的資料對應到這個二維的網格,即可畫出三維的曲面。
例5.2.3 繪製方程
sin((x^2+y^2)^(1/2))
z = ---------------------
(x^2+y^2)^(1/2)
在x∈[-7.5,7.5];y∈[-7.5,7.5] 的圖形。
>> x=-7.5:0.5:7.5;y=x;
>> [X,Y]=meshgrid(x,y);
>> R=sqrt(X.^2+Y.^2)+eps;
>> Z=sin(R)./R;
>> surf(X,Y,Z)
>> xlabel('X 軸方向')
>> ylabel('Y 軸方向')
>> zlabel('Z 軸方向')
(見圖5.2.4)
_(x^2+y^2)
例5.2.4 繪製由方程形成的立體圖。(見圖5.2.5) z=xe
>> clear
>> x=-2:0.1:2;y=x;
>> [X,Y]=meshgrid(x,y);
>> Z=X.*exp(-X.^2-Y.^2);
- 9 -
>> surf(X,Y,Z)
圖5.2.4
圖5.2.5
- 10 -
5.2.3 觀察點
MTALAB 允許使用者設定觀察點,其指令是: view(azimuth,elevation)
其中方位角azimuth 是觀察點和座標原點連線在x-y 平面的投影和y 軸負方向的夾角,仰
角
elevation 是觀察點與座標原點的連線和x-y 平面的夾角。對於這兩個角度,三維圖形的
預設
值分別是-37.5 和30,二維圖形的預設值是0 和90。
例5.2.5 從不同的角度觀察高斯矩陣的曲面。
>> z=peaks(40);
>> subplot(2,2,1);
>> mesh(z);
>> subplot(2,2,2);
>> mesh(z);
>> view(-37.5,-30);
>> subplot(2,2,3);
>> mesh(z);
>> view(180,0);
>> subplot(2,2,4);
>> mesh(z);
>> view(0,90);
圖5.2.6 對應不同觀察點的三維曲面圖
5.3 其他圖形函式
除了plot 繪圖函式以外,在有些場合對繪製的曲線會有一些特殊要求,這就要其他函
數來實現,常用的幾種函式如下(見表5.3.1)
- 11 -
表5.3.1 其他圖形函式表
函式含義
loglog 使用對數座標系繪圖
semilogx 橫座標為對數座標軸,縱座標為線性座標軸
semilogy 橫座標為線性座標軸,縱座標為對數座標軸
polar 繪製極座標圖
fill 繪製實心圖
bar 繪製直方圖
pie 繪製餅圖
area 繪製面積圖
quiver 繪製向量場圖
stairs 繪製階梯圖
sterm 繪製火柴桿圖
例5.3.1
>> x=0:pi/10:2*pi;
>> y1=sin(x);
>> subplot(2,2,1);
>> plot(x,y1);
>> subplot(2,2,2);
>> bar(x,y1);
>> subplot(2,2,3);
>> fill(x,y1,'g');
>> subplot(2,2,4);
>> stairs(x,y1,'k');
圖5.3.1 其他圖形函式
- 12 -
5.3.1 直方圖
函式bar(x)可以繪製直方圖,這對統計或者資料採集非常直觀實用。它共有四種形式:
bar,bar3,barh 和bar3h,其中bar 和bar3 分別用來繪製二維和三維豎直方圖,barh 和b
ar3h 分
別用來繪製二維和三維水平直方圖,呼叫格式是:
bar(x,y) 其中x 必須單調遞增或遞減,y 為n m× 矩陣,視覺化結果為m 組,每
組n 個垂直柱,也就是把y 的行畫在一起,同一列的資料用相同的顏色表示;
bar(x,y,width) (或bar(y,width))指定每個直方條的寬度,如width>1,則直方條會重
疊,預設值為width=0.8;
bar(…,’grouped’) 使同一組直方條緊緊靠在一起;
bar(…,’stack’) 把同一組資料描述在一個直方條上。
例5.3.2
>> y=[5 3 2 9;4 7 2 7;1 5 7 3];
>> subplot(2,2,1),bar(y)
>> x=[5 9 11];
>> subplot(2,2,2),bar3(x,y)
>> subplot(2,2,3),bar(x,y,'grouped')
>> subplot(2,2,4),bar(rand(2,3),.75,'stack')
圖5.3.2 直方圖
5.3.2 面積圖
函式area 用來繪製面積圖,面積圖在plot 的基礎上填充x 軸和曲線之間的面積,該圖
用於檢視某個數在該列所有數的總和中所佔的比例。
例5.3.3
>> x=-3:3;
>> y=[3 2 5;6 1 8;7 4 9;6 3 7;8 2 9;4 2 9;3 1 7];
>> area(x,y)
- 13 -
圖5.3.3 面積圖
5.3.3 餅圖
函式pie 用來繪製餅圖,它可以形象地表示出向量中各元素所佔比例。其呼叫格式是:
pie(x) x 中的元素通過x/sum(x)進行歸一化,以確定餅圖中的份額;
pie(x,explode) 向量explode 和x 元素數相同,用來指出需要分開的餅片,explode 中
不為零的部分會被分開。
圖5.3.4 餅圖
- 14 -
例5.3.4 設某班的某課程的考試成績如下:90 分以上有32 人,81 至90 有58 人,71
至80 分有27 人,60 至70 分為21 人,60 分以下有16 人,畫出餅圖。(見圖5.3.4)
>> x=[32 58 27 21 16];
>> explode0=[1 0 0 0 0];
>> subplot(1,2,1)
>> pie(x,explode0)
>> explode1=[0 0 0 0 1];
>> subplot(1,2,2)
>> pie(x,explode1)
5.3.4 不同座標系中的繪圖
Semilogx,semilogy,loglo,polar(theta,rho)的使用方法和plot 完全類似,不同的只是繪
制到
不同的圖形座標上。函式semilogx 繪製x 軸為對數標度的圖形,在半對數座標系中繪圖;
函式semilogy 繪製y 軸為對數標度的圖形;函式loglog 繪製兩個軸都為對數間隔的圖形
;
函式polar(theta,rho)繪製極座標圖形,其中theta 為相角,rho 為其對應的半徑。
例5.3.5 繪製ρ=acos(3θ),a=2 的圖形。(見圖5.3.5)
>> theta=-pi:pi/80:pi;
>> polar(theta,2*cos(3*theta))
圖5.3.5 極座標圖
5.4 符號表示式繪圖
MATLAB 軟體提供了將表示式進行圖形顯示的功能。完成此功能需呼叫fplot 函式和
ezplot 函式。
- 15 -
函式fplot 用來繪製數學函式,其呼叫格式為: fplot(fun,lims)
其中fun 就是所要繪製的函式,可以是定義函式的M 檔名,也可以是以x 為變數的可計
算字串。例如’diric(x,10)’或’[sin(x),cos(x)]’,對於向量x 的每個元素,函式
fun(x)必須返
回一個行向量。如果fun 返回[f1(x),f2(x),f3(x)],輸入[x1;x2],就會返回矩陣
f1(x1) f2(x1) f3(x1)
f1(x2) f2(x2) f3(x2)
lims=[XMIN XMAX YMIN YMAX]限定了x,y 軸上的繪圖空間。
例5.4.1
>> 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,2,3),fplot('[tan(x),sin(x),cos(x)]',2*pi*[-1 1 -1 1])
>> subplot(2,2,4),fplot('sin(1./x)',[0.01 0.1],1e-3)
圖5.4.1 fplot 函式繪製表示式圖形
ezplot 函式是簡捷繪圖指令之一,它無需資料準備,直接畫出函式圖形,基本呼叫格式
為ezplot(f)
其中f 是字串或代表數學函式的符號表示式,只有一個符號變數,可以是x,預設情況下
x 軸的繪圖區域為] 2 , 2 [ π π − ,但我們可以用ezplot(f,xmin,xmax)或ezp
lot(f,[xmin,xmax])來指
定x 的範圍。
例5.4.2
>> y='x^2';
>> subplot(1,2,1)
- 16 -
>> ezplot(y)
>> subplot(1,2,2)
>> y='sin(x)';
>> ezplot(y,[-pi,pi])
圖5.4.2 ezplot 函式繪製表示式圖形
5.5 plot 函式
MATLAB 對資料是按列儲存和計算的,運用plot(x)時,當x 為一個向量時,以其元
素為縱座標,其序號為橫座標值繪製曲線。當x 為實矩陣時,則以其序號為橫座標,按列
繪
制每列元素相對於序號的曲線,當x 為n m× 矩陣時,就有n 條曲線。
如果x,y 是同維向量,plot(x,y)指令以x 元素為橫座標值,y 元素為縱座標值繪製曲線。
如x 是向量,y 是有一維與x 元素數量相等的矩陣,則以x 為共同橫座標,按列繪製y 每
列
元素值,曲線數為y 的另一維的元素數。如果x,y 是同維矩陣,則以x,y 對應列元素為、
縱
座標分別繪製曲線,數目等於矩陣的列數。
例5.5.1
>> x=[3 5 10 8];
>> subplot(2,2,1)
>> plot(x)
>> x=[3 5 10 8;7 2 9 4;2 7 2 7]';
>> subplot(2,2,2)
>> plot(x)
>> x=[3 5 6 8];
>> y=[1 5 10 4];
- 17 -
>> subplot(2,2,3)
>> plot(x,y)
>> x=[1 3 5 7;2 4 6 8]';
>> y=[6 2 5 10;3 5 2 6]';
>> subplot(2,2,4)
>> plot(x,y,'k:*')
圖5.5.1
5.6 互動式圖形指令
ginput 是一個比較特殊的圖形指令,用作獲取圖上資料,例如指令
>>[x,y]=ginput(6) % 從圖形上選取6 個點
此時,ginput 指令將把當前圖形調入前臺,同時游標變為十字叉,移動游標,使交叉點落
在
目標點上,單擊滑鼠,即可獲得該點資料。
例5.5.2
>> fplot('humps',[0 1])
>> ginput(6)
x =
0.0449
0.1832
0.3007
0.3813
0.6417
0.8952
- 18 -
y =
7.4561
38.1579
96.3450
57.4561
10.9649
21.1988
相關文章
- MATLAB中的常用函式Matlab函式
- Matlab中erf函式的用法Matlab函式
- matlab中sort函式的用法Matlab函式
- Matlab中@與函式呼叫Matlab函式
- MATLAB中linspace函式使用Matlab函式
- matlab表示函式Matlab函式
- matlab中的產生隨機數的rand函式Matlab隨機函式
- matlab中用到的randperm函式Matlab函式
- R視覺化:plot函式基礎操作,小白教程視覺化函式
- [MATLAB] plot畫圖簡單細節隨記Matlab
- MATLAB函式randn簡介Matlab函式
- 【matlab程式設計】matlab隨機數函式Matlab程式設計隨機函式
- matlab 濾波器中用到的函式Matlab函式
- MATLAB巢狀函式練習Matlab巢狀函式
- matlab每日練習 lenght函式Matlab函式
- MATLAB常用基本數學函式Matlab函式
- 彩色影像二值化函式(matlab)函式Matlab
- matlab自定義函式建立與使用Matlab函式
- matlab常用函式與常用指令大全Matlab函式
- Matlab影像處理常用基本函式Matlab函式
- Rust中的into函式和from函式Rust函式
- Matlab學習筆記(1)——imshow函式的使用Matlab筆記函式
- MATLAB模糊邏輯工具箱函式Matlab函式
- MATLAB學習筆記—多型函式Matlab筆記多型函式
- Sql 中的 left 函式、right 函式SQL函式
- JS中函式內套函式的呼叫JS函式
- JS中的函式JS函式
- javascript中的函式JavaScript函式
- MATLAB中常用的幾種隨機數生成函式Matlab隨機函式
- matlab根據rgb通道值用plot畫相應顏色的線條Matlab
- js中在一個函式中引用另一個函式中的函式,可以這麼做JS函式
- JavaScript中的compose函式和pipe函式JavaScript函式
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- Matlab產生隨機數函式小結Matlab隨機函式
- 【MATLAB】利用size()函式輸出陣列大小Matlab函式陣列
- 如何使用函式指標呼叫類中的函式和普通函式函式指標
- C#中解構函式,Close函式,Dispose函式的區別C#函式
- 淺談Swift中的函式式Swift函式