MATLAB绘图功能大全.docx
《MATLAB绘图功能大全.docx》由会员分享,可在线阅读,更多相关《MATLAB绘图功能大全.docx(20页珍藏版)》请在冰豆网上搜索。
![MATLAB绘图功能大全.docx](https://file1.bdocx.com/fileroot1/2023-7/5/7e937707-e494-4ff7-98a2-bed53c0da33c/7e937707-e494-4ff7-98a2-bed53c0da33c1.gif)
MATLAB绘图功能大全
Matlab绘图
强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些根本参数就能得到所需图形,这类函数称为高层绘图函数。
此外,Matlab还提供了直接对图形句柄进展操作的低层绘图操作。
这类操作将图形的每个图形元素〔如坐标轴、曲线、文字等〕看做一个独立的对象,系统给每个对象分配一个句柄,可以通过句柄对该图形元素进展操作,而不影响其他局部。
本章介绍绘制二维和三维图形的高层绘图函数以及其他图形控制函数的使用方法,在此根底上,再介绍可以操作和控制各种图形对象的低层绘图操作。
一、二维绘图
二维图形是将平面坐标上的数据点连接起来的平面图形。
可以采用不同的坐标系,如直角坐标、对数坐标、极坐标等。
二维图形的绘制是其他绘图操作的根底。
〔一〕绘制二维曲线的根本函数
在Matlab中,最根本而且应用最为广泛的绘图函数为plot,利用它可以在二维平面上绘制出不同的曲线。
1.plot函数的根本用法
plot函数用于绘制二维平面上的线性坐标曲线图,要提供一组x坐标和对应的y坐标,可以绘制分别以x和y为横、纵坐标的二维曲线。
plot函数的应用格式
plot(x,y) 其中x,y为长度一样的向量,存储x坐标和y坐标。
例51在[0,2pi]区间,绘制曲线
程序如下:
在命令窗口中输入以下命令
>>x=0:
pi/100:
2*pi;
>>y=2*exp(-0.5*x).*sin(2*pi*x);
>>plot(x,y)
程序执行后,翻开一个图形窗口,在其中绘制出如下曲线
注意:
指数函数和正弦函数之间要用点乘运算,因为二者是向量。
例52绘制曲线
这是以参数形式给出的曲线方程,只要给定参数向量,再分别求出x,y向量即可输出曲线:
>>t=-pi:
pi/100:
pi;
>>x=t.*cos(3*t);
>>y=t.*sin(t).*sin(t);
>>plot(x,y)
程序执行后,翻开一个图形窗口,在其中绘制出如下曲线
以上提到plot函数的自变量x,y为长度一样的向量,这是最常见、最根本的用法。
实际应用中还有一些变化。
2.含多个输入参数的plot函数
plot函数可以包含假设干组向量对,每一组可以绘制出一条曲线。
含多个输入参数的plot函数调用格式为:
plot(x1,y1,x2,y2,…,xn,yn)
如以下命令可以在同一坐标中画出3条曲线。
>>x=linspace(0,2*pi,100);
>>plot(x,sin(x),x,2*sin(x),x,3*sin(x))
当输入参数有矩阵形式时,配对的x,y按对应的列元素为横坐标和纵坐标绘制曲线,曲线条数等于矩阵的列数。
>>x=linspace(0,2*pi,100);
>>y1=sin(x);
>>y2=2*sin(x);
>>y3=3*sin(x);
>>x=[x;x;x]';
>>y=[y1;y2;y3]';
>>plot(x,y,x,cos(x))
x,y都是含有三列的矩阵,它们组成输入参数对,绘制三条曲线;x和cos(x)又组成一对,绘制一条余弦曲线。
利用plot函数可以直接将矩阵的数据绘制在图形窗体中,此时plot函数将矩阵的每一列数据作为一条曲线绘制在窗体中。
如
>>A=pascal(5)
A=
1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70
>>plot(A)
3.含选项的plot函数
Matlab提供了一些绘图选项,用于确定所绘曲线的线型、颜色和数据点标记符号。
这些选项如表所示:
线型
颜色
标记符号
-实线
b蓝色
. 点
s方块
:
虚线
g绿色
o圆圈
d菱形
-.点划线
r红色
×叉号
∨朝下三角符号
--双划线
c青色
+加号
∧朝上三角符号
m品红
*星号
<朝左三角符号
y黄色
>朝右三角符号
k黑色
p五角星
w白色
h六角星
例用不同的线型和颜色在同一坐标绘制曲线及其包络线。
>>x=(0:
pi/100:
2*pi)';
>>y1=2*exp(-0.5*x)*[1,-1];
>>y2=2*exp(-0.5*x).*sin(2*pi*x);
>>x1=(0:
12)/2;
>>y3=2*exp(-0.5*x1).*sin(2*pi*x1);
>>plot(x,y1,'k:
',x,y2,'b--',x1,y3,'rp');
在该plot函数中包含了3组绘图参数,第一组用黑色虚线画出两条包络线,第二组用蓝色双划线画出曲线y,第三组用红色五角星离散标出数据点。
4.双纵坐标函数plotyy
在Matlab中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用plotyy函数,它能把具有不同量纲,不同数量级的两个函数绘制在同一个坐标中,有利于图形数据的比照分析。
使用格式为:
plotyy(x1,y1,x2,y2)。
x1,y1对应一条曲线,x2,y2对应另一条曲线。
横坐标的标度一样,纵坐标有两个,左边的对应x1,y1数据对,右边的对应x2,y2。
〔二〕绘制图形的辅助操作
绘制完图形以后,可能还需要对图形进展一些辅助操作,以使图形意义更加明确,可读性更强。
1.图形标注
在绘制图形时,可以对图形加上一些说明,如图形的名称、坐标轴说明以及图形某一局部的含义等,这些操作称为添加图形标注。
有关图形标注函数的调用格式为:
title〔’图形名称’〕〔都放在单引号〕
xlabel〔’x轴说明’〕
ylabel〔’y轴说明’〕
text〔x,y,’图形说明’〕
legend〔’图例1’,’图例2’,…〕P190
其中,title、xlabel和ylabel函数分别用于说明图形和坐标轴的名称。
text函数是在坐标点〔x,y〕处添加图形说明。
〔P88或用gtext命令〕。
legend函数用于绘制曲线所用线型、颜色或数据点标记图例,图例放置在空白处,用户还可以通过鼠标移动图例,将其放到所希望的位置。
除legend函数外,其他函数同样适用于三维图形,在三维中z坐标轴说明用zlabel函数。
上述函数中的说明文字,除了使用标准的ASCII字符外,还可以使用LaTex〔一种流行的数学排版软件〕格式的控制字符,这样就可以在图形上添加希腊字符,数学符号和公式等容。
在Matlab支持的LaTex字符串中,用/bf,/it,/rm控制字符分别定义黑体、斜体和正体字符,受LaTex字符串控制局部要加大括号{}括起来。
例如,text(0.3,0.5,’theusful{/bfMATLAB}’),将使MATLAB一词黑体显示。
一些常用的LaTex字符见表,各个字符可以单独使用也可以和其他字符及命令配合使用。
如text(0.3,0.5,’sin({/omega}t+{/beta})’)将得到标注效果。
标识符
符号
标识符
符号
标识符
符号
/alpha
/epsilon
/infty
/beta
/eta
/int
/gamma
/Gamma
/partial
/delta
/Delta
/leftarrow
/theta
/Theta
/rightarrow
/lambda
/Lambda
/downarrow
/xi
/Xi
/uparrow
/pi
/Pi
/div
/omega
/Omega
/times
/sigma
/Sigma
/pm
/phi
/Phi
/leq
/psi
/Psi
/geq
/rho
/tau
/neq
/mu
/zeta
/forall
/nu
/chi
/exists
2.坐标控制
在绘制图形时,Matlab可以自动根据要绘制曲线数据的围选择适宜的坐标刻度,使得曲线能够尽可能清晰的显示出来。
所以,一般情况下用户不必选择坐标轴的刻度围。
但是,如果用户对坐标不满意,可以利用axis函数对其重新设定。
其调用格式为
axis〔[xminxmaxyminymaxzminzmax]〕
如果只给出前四个参数,那么按照给出的x、y轴的最小值和最大值选择坐标系围,绘制出适宜的二维曲线。
如果给出了全部参数,那么绘制出三维图形。
axis函数的功能丰富,其常用的用法有:
axisequal:
纵横坐标轴采用等长刻度
axissquare:
产生正方形坐标系〔默认为矩形〕
axisauto:
使用默认设置
axisoff:
取消坐标轴
axison:
显示坐标轴
还有:
给坐标加网格线可以用grid命令来控制,gridon/off命令控制画还是不画网格线,不带参数的grid命令在两种之间进展切换。
给坐标加边框用box命令控制。
和grid一样用法
例:
绘制分段函数,并添加图形标注。
〔略〕
3.图形保持
一般情况下,每执行一次绘图命令,就刷新一次当前图形窗口,图形窗口原有图形将不复存在,如果希望在已经存在的图形上再继续添加新的图形,可以使用图形保持命令hold。
holdon/off命令是保持原有图形还是刷新原有图形,不带参数的hold命令在两者之间进展切换。
例:
〔略〕
4.图形窗口分割
在实际应用中,经常需要在一个图形窗口中绘制假设干个独立的图形,这就需要对图形窗口进展分割。
分割后的图形窗口由假设干个绘图区组成,每一个绘图区可以建立独立的坐标系并绘制图形。
同一图形窗口下的不同图形称为子图。
Matlab提供了subplot函数用来将当前窗口分割成假设干个绘图区,每个区域代表一个独立的子图,也是一个独立的坐标系,可以通过subplot函数激活某一区,该区为活动区,所发出的绘图命令都是作用于该活动区域。
调用格式:
subplot〔m,n,p〕
该函数把当前窗口分成m×n个绘图区,m行,每行n个绘图区,区号按行优先编号。
其中第p个区为当前活动区。
每一个绘图区允许以不同的坐标系单独绘制图形。
例:
〔略〕
三.绘制二维图形的其他函数
1.其他形式的线性直角坐标图
在线性直角坐标中,其他形式的图形有条形图、阶梯图、杆图和填充图等,所采用的函数分别为:
bar〔x,y,选项〕 选项在单引号中
stairs〔x,y,选项〕
stem〔x,y,选项〕
fill〔x1,y1,选项1,x2,y2,选项2,…〕
前三个函数和plot的用法相似,只是没有多输入变量形式。
fill函数按向量元素下标渐增次序依次用直线段连接x,y对应元素定义的数据点。
例5-8:
分别以条形图、填充图、阶梯图和杆图形式绘制曲线
x=0:
0.35:
7;
y=2*exp(-0.5*x);
subplot(2,2,1);bar(x,y,'g');
title('bar(x,y,''g'')');axis([0,7,0,2]);
subplot(2,2,2);fill(x,y,'r');
title('fill(x,y,''r'')');axis([0,7,0,2]);
subplot(2,2,3);stairs(x,y,'b');
title('stairs(x,y,''b'')');axis([0,7,0,2]);
subplot(2,2,4);stem(x,y,'k');
title('stem(x,y,''k'')');axis([0,7,0,2]);
2.极坐标图
polar函数用来绘制极坐标图,调用格式为:
polar〔theta,rho,选项〕
其中,theta为极坐标极角,rho为极径,选项的容和plot函数相似。
例5-9:
绘制的极坐标图
theta=0:
0.01:
2*pi;
rho=sin(3*theta).*cos(5*theta);
polar(theta,rho,'r');
3.对数坐标图
在实际应用中,经常用到对数坐标,Matlab提供了绘制对数和半对数坐标曲线的函数,其调用格式为:
semilogx〔x1,y1,选项1,x2,y2,选项2,…〕
semilogy〔x1,y1,选项1,x2,y2,选项2,…〕
loglog〔x1,y1,选项1,x2,y2,选项2,…〕
这些函数中选项的定义和plot函数完全一样,所不同的是坐标轴的选取。
semilogx函数使用半对数坐标,x轴为常用对数刻度,而y轴仍保持线性刻度。
semilogy恰好和semilogx相反。
loglog函数使用全对数坐标,x、y轴均采用对数刻度。
例:
略
4.对函数自适应采样的绘图函数
5.其他形式的二维图形
二.三维绘图
〔一〕绘制三维曲线的根本函数
最根本的三维图形函数为plot3,它将二维绘图函数plot的有关功能扩展到三维空间,可以用来绘制三维曲线。
其调用格式为:
plot3〔x1,y1,z1,选项1,x2,y2,z2,选项2,…〕
其中每一组x,y,z组成一组曲线的坐标参数,选项的定义和plot的选项一样。
当x,y,z是同维向量时,那么x,y,z对应元素构成一条三维曲线。
当x,y,z是同维矩阵时,那么以x,y,z对应列元素绘制三维曲线,曲线条数等于矩阵的列数。
例513绘制空间曲线
该曲线对应的参数方程为
t=0:
pi/50:
2*pi;
x=8*cos(t);
y=4*sqrt
(2)*sin(t);
z=-4*sqrt
(2)*sin(t);
plot3(x,y,z,'p');
title('Linein3-DSpace');
text(0,0,0,'origin');
xlabel('X');ylabel('Y');zlabel('Z');grid;
〔二〕三维曲面
1.平面网格坐标矩阵的生成
当绘制z=f(x,y)所代表的三维曲面图时,先要在xy平面选定一矩形区域,假定矩形区域为D=[a,b]×[c,d],然后将[a,b]在x方向分成m份,将[c,d]在y方向分成n份,由各划分点做平行轴的直线,把区域D分成m×n个小矩形。
生成代表每一个小矩形顶点坐标的平面网格坐标矩阵,最后利用有关函数绘图。
产生平面区域的网格坐标矩阵有两种方法:
利用矩阵运算生成。
x=a:
dx:
b;
y=(c:
dy:
d)’;
X=ones(size(y))*x;
Y=y*ones(size(x));
经过上述语句执行后,矩阵X的每一行都是向量x,行数等于向量y的元素个数,矩阵Y的每一列都是向量y,列数等于向量x的元素个数。
利用meshgrid函数生成;
x=a:
dx:
b;
y=c:
dy:
d;
[X,Y]=meshgrid(x,y);
语句执行后,所得到的网格坐标矩阵和上法,一样,当x=y时,可以写成meshgrid(x)
2.绘制三维曲面的函数
Matlab提供了mesh函数和surf函数来绘制三维曲面图。
mesh函数用来绘制三维网格图,而surf用来绘制三维曲面图,各线条之间的补面用颜色填充。
其调用格式为:
mesh〔x,y,z,c〕
surf〔x,y,z,c〕
一般情况下,x,y,z是维数一样的矩阵,x,y是网格坐标矩阵,z是网格点上的高度矩阵,c用于指定在不同高度下的颜色围。
c省略时,Matlab认为c=z,也即颜色的设定是正比于图形的高度的。
这样就可以得到层次清楚的三维图形。
当x,y省略时,把z矩阵的列下标当作x轴的坐标,把z矩阵的行下标当作y轴的坐标,然后绘制三维图形。
当x,y是向量时,要求x的长度必须等于z矩阵的列,y的长度必须等于必须等于z的行,x,y向量元素的组合构成网格点的x,y坐标,z坐标那么取自z矩阵,然后绘制三维曲线。
例515用三维曲面图表现函数:
为了便于分析三维曲面的各种特征,下面画出3种不同形式的曲面。
%program1
x=0:
0.1:
2*pi;
[x,y]=meshgrid(x);
z=sin(y).*cos(x);
mesh(x,y,z);
xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');
title('mesh');pause;
%program2
x=0:
0.1:
2*pi;
[x,y]=meshgrid(x);
z=sin(y).*cos(x);
surf(x,y,z);
xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');
title('surf');pause;
%program3
x=0:
0.1:
2*pi;
[x,y]=meshgrid(x);
z=sin(y).*cos(x);
plot3(x,y,z);
xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');
title('plot3-1');grid;
程序执行结果分别如上图所示。
从图中可以发现,网格图〔mesh〕中线条有颜色,线条间补面无颜色。
曲面图〔surf〕的线条都是黑色的,线条间补面有颜色。
进一步观察,曲面图补面颜色和网格图线条颜色都是沿z轴变化的。
用plot3绘制的三维曲面实际上由三维曲线组合而成。
可以分析plot〔x’,y’,z’〕所绘制的曲面的特征。
例516绘制两个直径相等的圆管相交的图形。
m=30;
z=1.2*(0:
m)/m;
r=ones(size(z));
theta=(0:
m)/m*2*pi;
x1=r'*cos(theta);y1=r'*sin(theta);%生成第一个圆管的坐标矩阵
z1=z'*ones(1,m+1);
x=(-m:
2:
m)/m;
x2=x'*ones(1,m+1);y2=r'*cos(theta);%生成第一个圆管的坐标矩阵
z2=r'*sin(theta);
surf(x1,y1,z1); %绘制竖立的圆管
axisequal,axisoff
holdon
surf(x2,y2,z2); %绘制平放的圆管
axisequal,axisoff
title('两个等直径圆管的交线');
holdoff
例517分析由函数构成的曲面形状与平面z=a的交线。
此外,还有两个和mesh函数相似的函数,即带等高线的三维网格曲面函数meshc和带底座的三维网格曲面函数meshz,其用法和mesh类似。
不同的是,meshc还在xy平面上绘制曲面在z轴方向的等高线,meshz还在xy平面上绘制曲面的底座。
surf函数也有两个类似的函数,即具有等高线的曲面函数surfc和具有光照效果的曲面函数surfl。
例518在xy平面选择[-8,8]×[-8,8]绘制函数,
[x,y]=meshgrid(-8:
0.5:
8);
z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps);
subplot(2,2,1);
meshc(x,y,z);
title('meshc');
subplot(2,2,2);
meshz(x,y,z);
title('meshz');
subplot(2,2,3);
surfc(x,y,z);
title('surfc');
subplot(2,2,4);
surfl(x,y,z);
title('surfl');
3.标准三维曲面
Matlab提供了一些函数用于绘制标准三维曲面,这些函数可以产生相应的绘图数据,常用于三维图形的演示。
如,sphere函数和cylinder函数分别用于绘制三维球面和柱面。
sphere函数的调用格式为:
[x,y,z]=sphere(n);
该函数将产生〔n+1〕×〔n+1矩阵x,y,z。
采用这三个矩阵可以绘制出圆心位于原点、半径为1的单位球体。
假设在调用该函数时不带输出参数,那么直接绘制所需球面。
n决定了球面的圆滑程度,其默认值为20。
假设n值取的比拟小,那么绘制出多面体的外表图。
cylinder函数的调用格式为:
[x,y,z]=cylinder〔R,n〕
其中R是一个向量,存放柱面各个等间隔高度上的半径,n表示在圆柱圆周上有n个间隔点,默认有20个间隔点。
如:
cylinder〔3〕生成一个圆柱,cylinder〔[10,1]〕生成一个圆锥。
而t=0:
pi/100:
4*pi;R=sin(t);cylinder(R,30);生成一个正弦圆柱面。
另外Matlab还提供了一个peaks函数,称为多峰函数,常用于三维曲面的演示。
该函数可以用来生成绘图数据矩阵,矩阵元素由函数:
在矩形区域[-33]×[-33]的等分网格点上的函数值确定。
如:
z=peaks〔30〕
将生成一个30×30矩阵,
例519绘制标准三维曲面图形
t=0:
pi/20:
2*pi;
[x,y,z]=cylinder(2+sin(t),30);
subplot(1,3,1);
surf(x,y,z);
subplot(1,3,2);
[x,y,z]=sphere;
surf(x,y,z);
subplot(1,3,3);
[x,y,z]=peaks(30);
meshz(x,y,z);
3.其他三维图形。
在介绍二维图形时,曾经提到条形图、杆图、饼图和填充图等特殊图形,它们还可以以三维形式出现,其函数分别为bar3,stem3,pie3和fill3。
bar3绘制三维条形图,常用格式为:
bar3〔y〕;
bar3〔x,y〕
在第一种格式中,y的每个元素对应于一个条形。
第二种格式在x指定的位置上绘制y中元素的条形图。
stem3函数绘制离散序列数据的三维杆图,常用格式为:
stem3〔z〕
stem3〔x,y,z〕
第一种格式将数据序列z表示为从xy平面向上延伸的杆图,x和y自动生成。
第二种格式在x和y指定的位置上绘制数据序列z的杆图,x,y,z的维数要一样。
pie3函数绘制三维饼图,常用格式为:
pie3〔x〕
x为向量,用x中的数据绘制一个三维饼图。
fill3函数可在三维空间绘制出填充过的多边形,常用格式为:
fill3〔x,y,z,c〕
用x,y,z做多边形的顶点,而c指定了填充的颜色。
例520绘制三维图形。
1绘制魔方阵的三维条形图2以三维杆图形式绘制曲线y=2sinx 3x=[2347,1827,2043,3025],绘制三维饼图 4用随机的顶点坐标值画出5个黄色三角形
subplot(2,2,1);
bar3(magic(4));
subplot(2,2,2);
y=2*sin(0:
pi/10:
2*pi);
stem3(y);
subplot(2,2,3);
pie3([2347,1827,2043