第4章 MATLAB绘图 4.1 MATLAB二维曲线绘图 4.1.1 基本绘图指令 1.plot(Y) 功能:画一条或多条折线图. 例4-1 运行下列命令 Y=[2,3,5,6;8, 5,7,4;4,5,6,7] plot(Y)
(2)plot(X,Y) 功能:画一条或几条折线图,X,Y可以是向量 或矩阵. 例4-2 在[-π,π]上,绘制y=sinx的图形. 解:MATLAB命令为 x=-pi:pi/50:pi; y=sin(x); plot(x,y),grid on
例4-3 画出椭圆 的曲线图. 解:椭圆的参数方程为 x=5cost y=9sint,(0≤t≤2π) MATLAB命令为: t=0:pi/50:2*pi; x=5*cos(t); y=9*sin(t); plot(x,y),grid on
例4-4 绘制两条曲线 的图形. 解:MATLAB命令为: x=-2*pi:pi/50:2*pi; y=[sin(x+3);exp(sin(x))]; plot(x,y),grid on
功能:在同一图形窗口画出多条折线或曲线。 (3)plot(X1,Y1,X2,Y2,X3,Y3,…) 功能:在同一图形窗口画出多条折线或曲线。 例4-5 在同一图形窗口画出三个函数y=2x,y=cosx, y=sinx的图形,-3≤x≤3. 解:MATLAB命令为 x=-3:0.1:3; y1=2*x;y2=cos(x);y3=sin(x); plot(x,y1,’*’,x,y2,’P’,x,y3) legend(‘2*x’,’cos(x)’,’sin(x)’)
2.loglog函数 例 4-6 绘制函数y=ex双轴对数图形. 解: x=1:10 y=exp(x) loglog(x,y) 3.单轴对数图形函数 semilogx和semilogy 例 4-7 绘制函数y=ex的单轴对数图形,其中纵轴采用 对数坐标,横轴采用线性坐标. 解: x=1:10 y=exp(x) semilogy(x,y)
4.双坐标轴函数plotyy 例 4-8 利用plotyy来绘制多轴标度图形. 解: x=0:0.01:20; y1=200*exp(-0.5*x).*sin(x); y2=0.8*exp(-0.5*x).*sin(10*x); [ax,h1,h2]=plotyy(x,y1,x,y2); set(get(ax(1),'ylabel'),'string','慢衰减') set(get(ax(2),'ylabel'),'string','快衰减') xlabel('时间') title('不同衰减速度对比')
4.1.2 基本绘图控制参数 (1)图形窗口figure 命令格式:figure; figure(n); (2)清除图形窗口clf (3)控制分隔线grid grid on (使用网格线); grid off(取消分隔线); (4)图形的重叠绘制hold (on | off) (5)取点指令ginput;ginput(n)
例4-9 利用hold指令,grid指令在同一坐标系中画出为两条曲线. y=cosx,y=sinx 0≤x≤2π 解: x=0:pi/50:2*pi; y1=cos(x);y2=sin(x); plot(x,y1,’b*’) hold on, plot(x,y2,’r.’),grid on
4.1.3 坐标轴的控制 P43 4.1.4 线条属性 格式:plot(x,y,LineSpec,…,’PropertyName’,PropertyValue,..) 其中:LineSpec是指线条的如下三个属性:线型,标记类型及颜色,并用一个字符串来完成.如plot(x,y,’-db’) 1)颜色控制 表4-1 y---黄色 m----洋红 c----青色 r----红色 g---绿色 b----蓝色 w---白色 k---黑色
2)标记类型 绘图字符 数据点 . 黑点 D 钻石形 o 小圆圈 ^ 三角形(向上) × 差号 V 三角形(向下) + 十字标号 < 表4-2 标记类型 绘图字符 数据点 . 黑点 D 钻石形 o 小圆圈 ^ 三角形(向上) × 差号 V 三角形(向下) + 十字标号 < 三角形(向左) * 星号 > 三角形(向右) s 小方块 h 六角星 p 五角星
3)线型 表4-3 线型控制表 线型符号 线型 - 实线 : 点线 -. 点划线 -- 虚线
例4-10 绘制函数y=cos2t的图像,并定义线条的属性。 4)标记类型控制表 线条宽度:linewidth(单位为像素) 标记大小:markersize(单位为像素) 标记面填充颜色:markerfacecolor(见表4-1) 标记周边颜色:markeredgecolor (见表4-1) 例4-10 绘制函数y=cos2t的图像,并定义线条的属性。 解 MATLAB命令为: t=0:pi/25:2*pi; plot(t,cos(2*t),’-mo’,’linewidth’,2,’markeredgecolor’,’k’,… ‘markerfacecolor’,[0.49 1 0.63],’markersize’,10)
4.1.5 图形的标注 1.图名标注(在figure中) 1)Insert---Title 2)Tools---Edit Plot在图形内双击空白区 3)使用title函数标注图名 title('string') title(...,'PropertyName',PropertyValue,...) 2.坐标轴标注 xlabel('string') xlabel(fname) xlabel(...,'PropertyName',PropertyValue,...) ylabel,zlabel与xlabel相同
3.图形标注 4.图例标注 text(x,y,'string') text(x,y,z,'string') text(...'PropertyName',PropertyValue,...) gtext(‘string’)在鼠标‘+’ 指定位置上标注 4.图例标注 菜单Insert---legend 命令legend('string1','string2',...)
4.1.6 一个图形窗口多个子图的绘制 subplot(m,n,i)把图形窗口分为m*n个子图,并在第i个子图 中画图 4.1.6 一个图形窗口多个子图的绘制 subplot(m,n,i)把图形窗口分为m*n个子图,并在第i个子图 中画图 例 4-11 在同一坐标系中画出两个函数,y=cos2x,y=sinxsin6x 的图形,自变量的范围为0≤ x ≤π,函数y=cos2x用红色星号,函数 y=sinxsin6x用蓝色实线,并加图名、坐标轴、图形、图例标注 解 MATLAB命令为: x=0:pi/50:pi; y1=cos(2*x);y2=sin(x).*sin(6*x); plot(x,y1,'r*',x,y2,'b-'),grid on title(‘曲线y1=cos(2x)曲线y2=sin(x)sin(6x)') xlabel('x轴'),ylabel('y轴') gtext('y1=cos(2x)'),gtext('y2=sin(x)sin(6x)') legend('y1=cos(2x)','y2=sin(x)sin(6x)')
例 4-12 演示subplot指令对图形窗口的分割 解 MATLAB命令为: clf; x=-2:0.2:2; y1=x+sin(x);y2=sin(x)./x;y3=x.^2; subplot(2,2,1),plot(x,y1,’m.’),grid on,title(‘y=x+sinx’) subplot(2,2,2),plot(x,y2,’rp’),grid on,title(‘y=sinx/x’) subplot(‘position’,[0.2,0.05,0.6,0.45]), plot(x,y3),grid on,text(0.3,2.3,’x^2’)
4.1.7 绘制数值函数二维曲线的指令fplot fplot的格式:fplot(fun,limits,tol,linespec) 说明:fun是函数名,可以是函数串及自定义函数;limits是坐标轴的取值范围;tol是相对误差,默认值为2e-3;linespec是线型,颜色和数据点等设置. 例 4-13 分别利用指令plot和fplot绘制y=cos(1/x)在区间[-1,1]的图像,并作比较. 解 (1)用plot画图,MATLAB命令为: x=-1:0.1:1; y=cos(1./x) plot(x,y)
4.1.8 绘制符号函数二维曲线的指令ezplot (2)用fplot画图,MATLAB命令为: fplot(‘cos(1./x)’,[-1,1]) 4.1.8 绘制符号函数二维曲线的指令ezplot ezplot的格式:ezplot(F,[xmin,xmax]) 说明:F可以是字符串表达式,符号函数,内联函数,但是所有函数都只能是一元函数.如果区间[xmin,xmax]缺省,为[-2π,2 π]. 例4-14 绘制 在区间[0,4pi]上的图形. 解 MATLAB命令为: syms t ezplot(‘2/3*exp(-t/2)*cos(3/2*t)’,[0,4*pi])
4.2 MATLAB二维特殊图形 4.2.1 条形图 用bar和barh分别绘制二维垂直条形图和二维水平条开形图. 1)bar(Y) 若Y为向量,则分别显示每个分量的高度,横坐标为1到length(Y); 若Y为矩阵,则把Y分解成行向量,再分别画出,横坐标为矩阵的行数. 2)bar(X,Y) 在指定的横坐标X上画出Y. 3) bar(X,Y,width) width为同一组内图形的间距,默认值为0.8. 4) bar(X,Y,’style’) style有两种模式,group模式,若Y为n*m矩阵,则bar显示 n组,每一组有m个垂直条形的条形图; stack模式,对Y的每一个行向量显示在 一个条形图中,条形图的高度为该行向量的分量的和.
subplot(2,2,1),bar(y,’group’),title(‘group’) 例 4-15 使用bar和barh绘图 解 MATLAB命令为: y=rand(6,4)*8; subplot(2,2,1),bar(y,’group’),title(‘group’) subplot(2,2,2),bar(y,’stack’),title(‘stack’) subplot(2,2,3),barh(y,’stack’),title(‘stack’) subplot(2,2,4),bar(y,1.6),title(‘group’) 其它特殊绘图略(见教科书)
4.3 三维曲线绘图 plot3(X,Y,Z,’String’) 4.3 三维曲线绘图 plot3(X,Y,Z,’String’) plot3(X1,Y1,Z1,’String1’, X2,Y2,Z2,’String1’,…) 空间曲线的参数方程为x=x(t),y=y(t),z=z(t),t为参数。 例4-22 绘制三维曲线的图象: 解 MATLAB命令为: t=0:pi/10:20*pi; x=t.*sin(t); y=t.*cos(t); z=t; plot3(x,y,z)
例4-23 在同一坐标下绘制如下两个函数的图象: 与 解 MATLAB命令为: t=linspace(0,10*pi,1001); plot3(t.*sin(t),t.*cos(t),t, t.*sin(t),t.*cos(t),-t)
例4-24 使用plot3绘制三维螺线,并用红色星号画出。 解 MATLAB命令为: t=0:pi/50:10*pi; plot3(sin(t),cos(t),t,’r*’); grid on; axis square
4.4 三维曲面绘图 4.4.1 meshgrid命令 二元函数z=f(x,y)的图形是三维空间曲面,MATLAB把函数z=f(x,y)定义在矩形 区域D=[x0,xm] ×[y0,yn]上,区域D分成m×n个小矩形块.每个小矩形有4个顶点 (xi,yi,f(xi,yi)),连接4个顶点得到一个空间中的四边形片,所有这些四边形片构成函 数的空间网格曲面.用函数meshgrid生成xy平面上的小矩形顶点坐标值的矩阵, 也称为格点矩阵 Meshgrid的调用格式: [X,Y]=meshgrid(x,y) 绘制二维图形时生成的小矩形的格点. [X,Y]=meshgrid(x) 等价于[X,Y]=meshgrid(x,x). [X,Y,Z]=meshgrid(x,y,z) 绘制三维图形时生成的空间曲面的格点. [X,Y,Z]=meshgrid(x) 等价于[X,Y,Z]=meshgrid(x,x,x) 说明:x是区间[x0,xm] 上分划点组成的向量,而y是区间[y0,ym] 上分划点组成的向量.输出向量X和Y都是m×n矩阵,而矩阵X的行向量都是x,矩阵Y的列向量都是y.
例 4-25 已知向量x=[1,2 3],y=[4 ,7,9,0],生成它们对应的格点矩阵. 解 MATLAB命令为: x=[1 2 3]; y=[4 7 9 0]; [X,Y]=meshgrid(x,y) 利用函数meshgrid生成格点矩阵,然后求出各格点对应的函数值,就可以利用 mesh和surf命令分别生成空间的网格曲面和表面曲面. 4.4.2 三维网格命令mesh Mesh调用格式; mesh(X,Y,Z),用来绘制一个网格图,图像的颜色由Z确定。X,Y,Z可以是同 维的矩阵,也可以是向量,如果X,Y为向量,必需满足:length(X)=n,length(Y)=m, 其中[m,n]=size(Z). mesh的其它调用格式见P60。
例 4-26 画出函数z=x2+y2在-3≤x,y ≤3 上的图形,以及函数 z=x2-2y2 在-10≤x,y ≤10 上的图形。 解 MATLAB命令为: %函数z=x2+y2 t1=-3:0.1:3; [x1,y1]=meshgrid(t1); z1=x1.^2+y1.^2; subplot(1,2,1), mesh(x1,y1,z1),title(‘x^2+y^2’) %马鞍面z=x2-2y2 t2=-10:0.1:10; [x2,y2]=meshgrid(t2); z2=x2.^2-2*y2.^2; subplot(1,2,2), mesh(x2,y2,z2),title(‘马鞍面’)
例 4-27 分别用指令mesh,meshc,meshz画出 在-8≤x,y≤8上的图形。 解 MATLAB命令为: %函数 t=-8:0.1:8; [x,y]=meshgrid(t); r=sqrt(x.^2+y.^2)+eps; z=sin(r)./r; subplot(1,3,1),meshc(x,y,z) title(‘meshc’),axis([-8 8 -8 8 -0.5 0.8]) subplot(1,3,2),meshz(x,y,z) title(‘meshz’),axis([-8 8 -8 8 -0.5 0.8]) subplot(1,3,3),mesh (x,y,z) title(‘mesh’),axis([-8 8 -8 8 -0.5 0.8])
4.4.2 三维表面命令surf 用法同mesh命令 例4-28 画出函数 ,-2≤x,y ≤2的图像,比较指令surf与mesh. 解 MATLAB命令为: %用mesh完成: t=-2:0.1:2; [x,y]=meshgrid(t); z=x.*exp(-x.^2-y.^2); mesh(x,y,z) %用surf完成: surf(x,y,z)
t=-10:0.1:10;[x,y]=meshgrid(t);z1=(x.^2-2*y.^2)+eps; 例4-29 画出函数 z=x2+y2 ,-1≤x,y ≤1的图像,比较指令surf与mesh. 解 MATLAB命令为: t=-1:0.1:1; [x,y]=meshgrid(t); z=x.^2+y.^2; subplot(1,2,1),mesh(x,y,z),title(‘网格图’) subplot(1,2,2),surf(x,y,z),title(‘表面图’) 例4-30 用平行截线法讨论由方程构成的马鞍面形状。 解 MATLAB命令为: %马鞍面 t=-10:0.1:10;[x,y]=meshgrid(t);z1=(x.^2-2*y.^2)+eps; subplot(1,3,1),mesh(x,y,z1),title(‘马鞍面’) %平面 a=input(‘a=(-50<a<50)’);z2=a*ones(size(x)); subplot(1,3,2),mesh(x,y,z2),title(‘平面’) %交线plot3 r0=abs(z1-z2)<=1;zz=r0.*z2;yy=r0.*y;xx=r0.*x; subplot(1,3,3),plot3(xx(r0~=0),yy(r0~=0),zz(r0~=0),’x’), title(‘交线’)
[x,y,z]=shpere(n),x,y,z是返回的(n+1)*(n+1)矩阵,且 surf(x,y,z)为单位球面. 4.4.4 绘制球面和柱面 绘制球面 sphere(n) 绘制一个单位球面,且球面上分格线条数为n. [x,y,z]=shpere(n),x,y,z是返回的(n+1)*(n+1)矩阵,且 surf(x,y,z)为单位球面. 例 4-31 画函数x2+y2+z2=1与x2+y2+z2=4的图形. 解 MATLAB命令为: %半径为1的球面 v=[-2 2 -2 2 -2 2]; subplot(121),shpere(30),title(‘半径为1的球面’),axis(v) %半径为2的球面 [x,y,z]=spere(30); subplot(122),surf(2*x,2*y,2*z),title(‘半径为2的球面’),axis(v)
subplot(121),cylinder, %默认的柱面 t=-pi:pi/10:pi; 2. 绘制柱面 cylinder 生成单位柱面 [x,y,z]=cylinder 返回半径为1的柱面x,y,z的坐标,然后用surf,mesh绘图. [x,y,z]=cylinder(r,n) 返回用r定义周长曲线的柱面x,y,z的坐标,且柱面上 格线条数为n. 例 4-32 画柱面与改变柱面半径的图形. 解 MATLAB命令为: subplot(121),cylinder, %默认的柱面 t=-pi:pi/10:pi; [X,Y,Z]=cylinder(1+sin(t)); %改变柱面半径 subplot(122) surf(X,Y,Z) axis equare
4.5 三维图形的控制命令 4.5.1 视角控制命令view 从不同的位置和角度观察图形命令view: view(az,el) 设置查看三维图形的三个角度,其中az为水平方位角,从Y轴负方向开始,以逆时针方向旋转为正;el为垂直方位角,以向Z轴方向的旋转为正,向Z轴负方向的旋转为负. view([x,y,z]) 在笛卡尔坐标系下的视角. view(2) 设置默认的二维视角,此时az=0,el=90. view(3) 设置默认的三维视角,此时az=-37.5,el=30. 例 4-33 绘制函数 ,并从不同的角度观察图形. 解 MATLAB命令为: subplot(222),surf(x,y,z) view(30,30) subplot(223),surf(x,y,z) view(30,0) subplot(224),surf(x,y,z) view(-120,30) t=-2:0.1:2; [x,y]=meshgrid(t); z=x.*exp(-x.^2-y.^2); subplot(221),surf(x,y,z) view(3)
4.5.2 旋转控制命令rotate rotate(h,direction,alpha) 该命令将图形绕方向旋转一个角度.其中 参数h表示被旋转的对象.参数direction设置有两种方法:球坐标法 ,设置为[theta,phi],其单位为度;直角坐标法,即[x,y,z].参数alpha 是按右手法旋转的角度. 例 4-34 利用rotate,从不同的角度查看函数 解 MATLAB命令为: 说明:使用view旋转的是 坐标轴,使用rotate旋转的是图形,轴不变.而命令 rotate3d可使用户手动 旋转图形. t=-2:0.1:2; [x,y]=meshgrid(t); z=x.*exp(-x.^2-y.^2); h=surf(z) rotate(h,[-2,-2,0],30,[2,2,0]) colormap cool 例 4-35 利用rotate3d调整函数peaks的视角. 解 MATLAB命令为: surf(peaks(40)); rotate3d;
例 4-36 为peaks函数设置不同的背景颜色. 4.5.3 背景颜色控制命令colordef colordef white 将图形的背景色设置为白色. colordef black 将图形的背景色设置为黑色. colordef black 将图形的背景和图形窗口设置为默认色. colordef(fig,color_option) 将图形句柄fig图形的背景色设置为 由color_option指定的颜色. 例 4-36 为peaks函数设置不同的背景颜色. 解 MATLAB命令为: subplot(131),colordef none; surf(peaks(35)); subplot(132),colordef black; subplot(133),colordef white;
例 4-37 绘制peaks的图形,设置图形的颜色. 例 4-38 绘制球的图形,然后进行不同的着色. 4.5.4 图形颜色控制命令colormap colormap([R,G,B] 其中[R,G,B]代表一种颜色配色方案,见P71-表4-5. colormap(CM) 其中CM代表系统预定义的色图矩阵,见P71-表4-6 例 4-37 绘制peaks的图形,设置图形的颜色. 解 MATLAB命令为: surf(peaks(100)); colormap(cool) 4.5.5 图形着色控制命令shading shading flat 使用平滑方式着色. shading interp 使用插值方式着色. shading faceted 以平面为单位进行着色,在flat基础上,在贴片的四 周勾画黑色网线,此为系统的默认值. 例 4-38 绘制球的图形,然后进行不同的着色.
例 4-39 球的透视. 解 MATLAB命令为: [X,Y,Z]=sphere(30); subplot(131);surf(X,Y,Z);shading interp subplot(132);surf(X,Y,Z);shading flat subplot(133);surf(X,Y,Z) 4.5.6 透视控制命令hidden 在三维图形绘图时,三维图形后面的网格线会隐藏重叠,如果需要了解 隐藏的网格线,就需要透视控制命令hidden. hidden on 消隐重叠线 hidden off 透视重叠线 例 4-39 球的透视. 解 MATLAB命令为: [X0,Y0,Z0]=sphere(30); X=2*X0;Y=2*Y0;Z=2*Z0; surf(X0,Y0,Z0); shading interp hold on,mesh(X,Y,Z),colormap(hot), hold off hidden off axis equal,axis off
例 4-40 生成peaks的曲面图,之后添加光源. 4.5.7 光照控制命令light light(‘PropertyName’,Propertyvalue,…) 创建光源并设置其值。 例 4-40 生成peaks的曲面图,之后添加光源. 解 MATLAB命令为: z=peaks(50); surf(z); light(‘position’,[20,20,5])
习题: 1、绘制 的图像,要求用蓝色的星号画图; 并且画出其包络线 的图像,用红色的点划线画图。 2、用fplot和ezplot命令绘出函数 在区间[1,10] 上的图像。 3、在同一图形窗口画三个子图
4、绘制圆锥螺线的图像并加各种标注,其参数方程为: 5、用mesh与surf命令绘制三维曲面z=x2+3y2的图像,并使用不同的着色效果及 光照效果。