matlab學習記(二)畫圖


畫圖是數模中重要的方法~
1.plot 函數基本用法

(1)plot(x,y) 通常為長度相同的向量

>> x=[2.5,3.5,4,5];
>> y=[1.5,2.0,1,1.5];
>> plot(x,y)

(2)最簡單的plot函數調用格式

plot(x)

>> x=[2.5,3.5,4,5];
>> y=[1.5,2.0,1,1.5];
>> plot(x,y)

當x是復數向量時,分別以該向量元素實部和虛部為橫縱坐標繪制出一條曲線。

>> x=[2.5,3.5,4,5];
>> y=[1.5,2.0,1,1.5];
>> cx=x+y*i;
>> plot(cx)

復數性變量也可以用complex函數構建

cx=complex(x,y);

(3)plot(x,y)函數參數的變化形式

🤡x是向量,y是矩陣

如果矩陣y的行數/列數等於x的長度,則以x為橫坐標,以列向量/行向量為縱坐標繪制曲線,曲線條數等於y的列數/行數

eg.繪制sin(x),sin(2x),sin(x/2)的圖像

>> x=linspace(0,2*pi,100);
>> y=[sin(x);sin(2*x);sin(0.5*x)];
>> plot(x,y)

🤡x,y為同型矩陣

以x,y對應列元素為橫縱坐標分別繪制曲線,曲線條數等於矩陣的列數

>> t=0:0.01:2*pi;
>> t1=t';
>> x=[t1,t1,t1];
>> y=[sin(t1),sin(2*t1),sin(0.5*t1)];
>> plot(x,y)

(4)含多個輸入參數的plot函數

plot( x1, y1, x2, y2, ... , xn, yn)

每一向量對構成一組數據點的橫縱坐標,繪制一條曲線

>> t1=linspace(0,2*pi,10);
>> t2=linspace(0,2*pi,20);
>> t3=linspace(0,2*pi,100);
>> plot(t1,sin(t1),t2,sin(t2)+1,t3,sin(t3)+2)

(5)含選項的plot函數

plot(x, y, 選項)

"-" 實線
“:”:虛線
“-.”:點划線
“--”:雙划線
“r”“g”“b”:紅綠藍
“w”:白色
“k”:黑色
“*”:星號
“o”:圓圈
“s”:方塊
“p”:五角星
“^”:朝上三角符號

eg.繪制曲線y=\(e^{-0.5x}sin(2\pi x)\)及其包絡線

>> x=(0:pi/50:2*pi)';
>> y2=2*exp(-0.5*x).*sin(2*pi*x);
>> y1=2*exp(-0.5*x)*[1,-1];
>> x1=0:0.5:6;
>> y3=2*exp(-0.5*x1).*sin(2*pi*x1);
>> plot(x,y1,'k:',x,y2,'b--',x1,y3,'rp')

2.fplot函數

(1).基本用法

fplot(f, lims, 選項)

f代表一個函數,通常采用函數句柄的形式(匿名函數),lims為x軸的取值范圍,用二元向量【xmin,xmax】描述

>> fplot(@(x) sin(1./x),[0,0.2],'b')

(2)雙輸入函數參數

fplot( funx, funy, tlims, 選項 )其中,funx,funy代表函數,通常使用函數句柄的形式。tlims為參數函數funx和funy的自變量的取值范圍,用二元向量【tmin,tmax】描述

eg.繪制螺旋線x=t * sint , y= t * cost

>> fplot(@(t) t.*sin(t),@(t)t.*cos(t),[0,10*pi],'r')

3.圖形標注

title(圖形標題)
xlabel
ylabel
text(x,y,說明)
legend(圖例1.圖例2,……)

legend函數應用

eg.繪制不同頻率的正弦曲線並用圖例標注曲線

>> x=linspace(0,2*pi,100);
>> plot(x,[sin(x);sin(2*x);sin(3*x)])
>> legend('sinx','sin(2x)','sin(3x)')

4.坐標控制

(1).axis

axis( [ xmin, xmax, ymin, ymax ,zmin, zmax] );

axis on;

axis off;

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

(2).給坐標系加網格,邊框

grid on

grid off

box on

box off

(3)圖形保持

hold on

hold off

>> t=linspace(0,2*pi,100);
>> x=sin(t);y=cos(t);
>> plot(x,y,'b')
>> hold on
>> plot(2*x,2*y,'r--')
>> grid on
>> axis([-2.2,2.2 -2.2,2.2])
>> axis equal

(4).圖形窗口的分割

subplot(m,n,p)

將圖形窗口分成m*n個繪圖區,當前繪圖區為p

>> x=linspace(0,2*pi,60);
>> subplot(2,2,1)
>> plot(x,sin(x)-1);
>> title('sin(x)-1');axis([0,2*pi,-2,0])
>> subplot(2,1,2)
>> plot(x,cos(x)+1);
>> title('cos(x)+1');axis([0,2*pi,0,2])
>> subplot(4,4,3)
>> plot(x,tan(x))
>> title('tan(x)');axis([0,2*pi,-40,40])
>> subplot(4,4,8)
>> plot(x,cot(x));
>> title('cot(x)');axis([0,2*pi,-35,35])

5.極坐標圖

polar( 極角, 極徑, 選項)

eg.

>> t=0:pi/100:2*pi;
>> r=1-sin(t);
>> subplot(1,2,1)
>> polar(t,r)
>> subplot(1,2,2)
>> t1=t-pi/2;
>> r1=1-sin(t1);
>> polar(t,r1)

6.統計圖

(1)條形類圖形

1).條形圖

bar: 繪制垂直條形圖

barh:繪制水平條形圖

bar(y, style)

style:" grouped ":簇狀分組

“stacked": 堆積分組

>> y=[1,2,3,4,5;1,2,1,2,1;5,4,3,2,1];
>> subplot(1,2,1)
>> bar(y)
>> title('Group')
>> subplot(1,2,2)
>> bar(y,'stacked')
>> title('Stack')

bar(x, y, style )x儲存橫坐標,y儲存數據,y的行數必須與向量x的長度相等

>> x=[2015,2016,2017];
>> y=[68,80,115,98,102;75,88,102,99,110;81,86,125,105,115];
>> bar(x,y)
>> title('Group');

2)直方圖

hist函數:繪制直角坐標系下的直方圖

rose函數:繪制極坐標系下的直方圖

hist(y,x): y是要統計的數據,x用於指定區間的划分方式。若x是標量,則統計區間均分成x個小區間;若x是向量,則向量x中的每一個數指定分組中心值,元素的個數為數據分組數。x缺省為10

>> y=randn(500,1);
>> subplot(2,1,1);
>> hist(y);
>> title('高斯分布直方圖');
>> subplot(2,1,2);
>> x=-3:0.2:3;
>> hist(y,x);
>> title('指定區間中心點的直方圖')

rose(theta, [, x]) theta確定每一區間與原點的角度

>> y=randn(500,1);
>> theta=y*pi;
>> rose(theta)
>> title('在極坐標下的直方圖')

(2)面積類圖形

1).扇形圖

pie(x, explode)數據+顯示模式

>> score=[5,17,23,9,4];
>> ex=[0,0,0,0,1];
>> pie(score,ex)
>> legend('優秀','良好','中等','及格','不及格','location','eastoutside')

location 指定圖例位置,eastoutside:圖例在繪圖區域右邊的外側

2).面積圖

area

(3)散點類圖形

scatter函數:散點圖

scatter(x, y, 選項, ‘filled’ )

>> t=0:pi/50:2*pi;
>> x=16*sin(t).^3;
>> y=13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t);
>> scatter(x,y,'rd','filled')

stairs函數:階梯圖

stem函數: 桿圖

3.矢量類圖形

compass函數:羅盤圖

feather函數:羽毛圖

quiver函數:箭頭圖

五.曲面
曲面由無數條曲線構成
eg.z=xsiny+4xcosy
x每取一個定值,都確定了一條二維曲線

>> x=-3:0.1:3;
>> y=0:0.1:2*pi;
>> [x,y]=meshgrid(x,y);
>> z=x.*sin(y)+4*x.*cos(y);
>> plot3(x,y,z)

meshgrid(x,y)產生一個以向量x為行,y為列的矩陣
例如:要在“3<=x<=5,6<=y<=9,z不限制區間” 這個區域內繪制一個3D圖形,如果只需要整數坐標為采樣點的話。我們可能需要下面這樣一個坐標構成的矩陣:

(3,9),(4,9),(5,9);

(3,8),(4,8),(5,8);

(3,7),(4,7),(5,7);

(3,6),(4,6),(5,6);

然后儲存時可以把各點的x,y坐標分別儲存到兩個矩陣中,於是便成為了

3,4,5;
3,4,5;
3,4,5;
3,4,5;

9,9,9;
8,8,8;
7,7,7;
6,6,6;

因此可以看出:meshgrid形成的x矩陣每一行相同,y矩陣每一列相同
上述函數用mesh(x,y,z)顯示的網格圖比plot3(x,y,z)要更直觀一些
總結一下:
plot3(x,y,z)三維曲線圖

mesh(x,y,z)三維網格圖

meshc(x,y,z)三維網格圖+xoy平面曲面的等高線

meshz(x,y,z)三維網格圖+曲線下面加上個矩形垂簾

surf(x,y,z)三維着色曲面圖

surface(x,y,z)得到曲面在xoy平面的投影圖,以顏色區分z值大小

shading flat指令讓曲面更加平滑

六.散點圖

>> x=[1,2,3,4,5];
>> y=[10,30,67,89,130];
>> plot(x,y,'k') % 折線圖
>> scatter(x,y,'k') % 散點圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM