畫圖是數模中重要的方法~
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') % 散點圖