1第4章MATLAB绘图MATLAB语言2本章目标•了解MATLAB的绘图功能•掌握二维图形和三维图形的绘制方法•能够进行常用的数据可视化处理MATLAB语言3主要内容•4.1二维图形•4.2图形修饰与控制•4.3三维图形MATLAB语言44.1二维图形4.1.1基本二维绘图命令•plot函数•格式–plot(x):缺省自变量的绘图格式,x可为向量或矩阵。当x为向量时,以x元素值为纵坐标,以相应元素下标为横坐标绘图。当x为实矩阵时,按列绘制曲线,每列的元素值为纵坐标,相应元素下标为横坐标。当x为m×n矩阵时,就有n条曲线。MATLAB语言5例.x为向量时plot(x)clearx=[3576122415336972];plot(x)例.x为矩阵时plot(x)clearx=[357;61224;15336;972]plot(x)MATLAB语言6plot(x,y):基本格式,x和y可为向量或矩阵。如果x,y是同维向量,以x元素为横坐标,以y元素为纵坐标绘图。如果x是向量,y是有一维与x元素数量相等的矩阵,则以x为共同横坐标,y元素为纵坐标绘图,曲线数目为y的另一维数。如果x,y是同维矩阵,则按列以x,y对应列元素为横、纵坐标绘图,曲线数目等于矩阵列数。MATLAB语言7例.x,y是同维向量时plot(x,y)clearx=0:pi/10:2*pi;y=sin(x);plot(x,y)例.在0≤x≤2区间内,绘制曲线y=2e-0.5xcos(4πx)x=0:pi/100:2*pi;y=2*exp(-0.5*x).*cos(4*pi*x);plot(x,y)MATLAB语言8例.绘制曲线:t=0:0.1:2*pi;x=t.*sin(3*t);y=t.*sin(t).*sin(t);plot(x,y)例.x是3维行向量,y是2×3矩阵时plot(x,y)clearx=[123]y=[453;268]plot(x,y)y=y'%y是3×2矩阵时plot(x,y)MATLAB语言9例.x,y是同维矩阵时plot(x,y)clearx=[356;245;397]y=[132;675;439]plot(x,y)MATLAB语言10plot(x1,y1,x2,y2,…):多条曲线绘图格式.在同一坐标系中绘制多个图形,以x1,x2…元素为横坐标值,以对应的y1,y2…元素为纵坐标绘图。例:程序如下:clearx=linspace(0,7);y1=sin(2*x);y2=sin(x.^2);y3=(sin(x)).^2;plot(x,y1,x,y2,x,y3)MATLAB语言11例.分析下列程序绘制的曲线。x1=linspace(0,2*pi);x2=linspace(0,3*pi);x3=linspace(0,4*pi);y1=sin(x1);y2=1+sin(x2);y3=2+sin(x3);x=[x1;x2;x3]';y=[y1;y2;y3]';plot(x,y,x1,y1-1)MATLAB语言12plot(x,y,’s’)--开关格式,开关量字符串s设定曲线颜色、线型及标示符号,由一对单引号括起来。plot(x1,y1,’s1’,x2,y2,’s2’,…)MATLAB语言13图形颜色、标记和线形参数表色彩字符所定颜色线型字符线型格式标记符号数据点形式标记符号数据点形式y黄-实线(默认).点左三角形m紫:点线o圆s方形c青-.点划线x叉号d菱形r红--虚线+加号h六角星g绿*星号p五角星b篮v下三角形w白^上三角形k黑右三角形MATLAB语言14•数据点形式square方形diamond菱形pentagram五角星hexagram六角星MATLAB语言15例x=linspace(0,7);y1=sin(2*x);%曲线1:红色实线,+号显示数据点y2=sin(x.^2);%曲线2:黑色点线,*号显示数据点y3=(sin(x)).^2;%曲线3:蓝色虚线,上三角形显示数据点plot(x,y1,'r+-',x,y2,'k*:',x,y3,'b--^')01234567-1-0.8-0.6-0.4-0.200.20.40.60.81MATLAB语言16在MATLAB中,如果需要绘制具有不同纵坐标标度的两个图形,可以使用plotyy绘图函数。调用格式为:plotyy(x1,y1,x2,y2)其中x1,y1对应一条曲线,x2,y2对应另一条曲线。横坐标的标度相同,纵坐标有两个,左纵坐标用于x1,y1数据对,右纵坐标用于x2,y2数据对。具有两个纵坐标标度的图形MATLAB语言17例.用不同标度在同一坐标内绘制曲线y1=0.2e-0.5xcos(4πx)和y2=2e-0.5xcos(πx)。程序如下:x=0:pi/100:2*pi;y1=0.2*exp(-0.5*x).*cos(4*pi*x);y2=2*exp(-0.5*x).*cos(pi*x);plotyy(x,y1,x,y2)MATLAB语言18holdon/off命令控制是保持原有图形还是刷新原有图形,不带参数的hold命令在两种状态之间进行切换。例.采用图形保持,在同一坐标内绘制曲线y1=0.2e-0.5xcos(4πx)和y2=2e-0.5xcos(πx)。程序如下:x=0:pi/100:2*pi;y1=0.2*exp(-0.5*x).*cos(4*pi*x);plot(x,y1,'k')holdony2=2*exp(-0.5*x).*cos(pi*x);plot(x,y2,'b');holdoff图形保持MATLAB语言19对函数自适应采样的绘图函数•fplot指令用来自动画一个已定义的函数分布图,而无须产生绘图所要的一组数据做为变量。采用自适应步长控制来画出函数的示意图,在函数变化激烈的区间,采用小的步长,否则采用大的步长。总之,使计算量与时间最小,图形尽可能精确。MATLAB语言20fplot函数调用格式:fplot(fname,lims,tol,选项)其中fname为函数名,以字符串形式出现,lims为x,y的取值范围,tol为相对允许误差,其系统默认值为2e-3。选项定义与plot函数相同。例.用fplot函数绘制f(x)=cos(tan(πx))的曲线。程序如下:fplot('cos(tan(pi*x))',[0,1],1e-4)MATLAB语言21subplot函数调用格式:subplot(m,n,p)该函数将当前图形窗口分成m×n个绘图区,即每行n个,共m行,区号按行优先编号,且选定第p个区为当前活动区。在每一个绘图区允许以不同的坐标系单独绘制图形。图形窗口的分割MATLAB语言22采用图形窗口分割方法进行比较显示cleart=0:pi/10:2*pi;y1=sin(t);y2=cos(t);y3=cos(t+pi/2);y4=cos(t+pi);subplot(2,2,1);plot(t,y1);%将图形窗口分割成两行两列,y1为第1行第1列subplot(2,2,2);plot(t,y2);%将图形窗口分割成两行两列,y2为第1行第2列subplot(2,2,3);plot(t,y3);%将图形窗口分割成两行两列,y3为第2行第1列subplot(2,2,4);plot(t,y4);%将图形窗口分割成两行两列,y4为第2行第2列MATLAB语言234.1.2特殊的二维函数命令一其它坐标系下的二维数据曲线图1.对数坐标绘制对数和半对数坐标曲线的函数,其调用格式为:semilogx(x1,y1,选项1,x2,y2,选项2,…)semilogy(x1,y1,选项1,x2,y2,选项2,…)loglog(x1,y1,选项1,x2,y2,选项2,…)MATLAB语言24例.在对数坐标系中绘图.clearx=logspace(-1,2);%在10^(-1)到10^2之间产生50个对数等分的行向量subplot(121);loglog(x,10*exp(x),'-p')gridonsubplot(122);semilogx(x,cos(10.^x))gridonMATLAB语言252.极坐标图polar函数用来绘制极坐标图,其调用格式:polar(theta,rho,选项)其中theta为极坐标极角,rho为极坐标半径,选项的内容与plot函数相似MATLAB语言26例.绘制r=sin(t)cos(t)的极坐标图,并标记数据点。程序如下:t=0:pi/50:2*pi;r=sin(t).*cos(t);polar(t,r,'-*');MATLAB语言27•画出一花瓣状图形theta=-pi:0.01:pi;rho(1,:)=2*sin(5*theta).^2;rho(2,:)=cos(10*theta).^3;rho(3,:)=sin(theta).^2;rho(4,:)=5*cos(3.5*theta).^3;fori=1:4%极坐标图形输出函数polar(theta,rho(i,:))pauseendMATLAB语言28在MATLAB中,二维统计分析图形很多,常见的有条形图、阶梯图、杆图和填充图等,所采用的函数分别是:bar(x,y,选项)stairs(x,y,选项)stem(x,y,选项)fill(x1,y1,选项1,x2,y2,选项2,…)二、二维统计分析图MATLAB语言29例.分别以条形图、阶梯图、杆图和填充图形式绘制曲线y=2sin(x)。程序如下:x=0:pi/10:2*pi;y=2*sin(x);subplot(2,2,1);bar(x,y,'g');title('bar(x,y,''g'')');axis([0,7,-2,2]);subplot(2,2,2);stairs(x,y,'b');title('stairs(x,y,''b'')');axis([0,7,-2,2]);subplot(2,2,3);stem(x,y,'k');title('stem(x,y,''k'')');axis([0,7,-2,2]);subplot(2,2,4);fill(x,y,'y');title('fill(x,y,''y'')');axis([0,7,-2,2]);MATLAB语言30MATLAB提供的统计分析绘图函数还有很多,例如,用来表示各元素占总和的百分比的饼图、复数的相量图等等。例.绘制图形:(1)某企业全年各季度的产值(单位:万元)分别为:2347,1827,2043,3025,试用饼图作统计分析。(2)绘制复数的相量图:7+2.9i、2-3i和-1.5-6i。程序如下:subplot(1,2,1);pie([2347,1827,2043,3025]);title('饼图');legend('一季度','二季度','三季度','四季度');subplot(1,2,2);compass([7+2.9i,2-3i,-1.5-6i]);title('相量图');MATLAB语言31三、隐函数绘图MATLAB提供了一个ezplot函数绘制隐函数图形,下面介绍其用法。对于函数f=f(x)ezplot函数的调用格式为:ezplot(f):在默认区间-2πx2π绘制f=f(x)的图形。ezplot(f,[a,b]):在区间axb绘制f=f(x)的图形。MATLAB语言32对于隐函数f=f(x,y),ezplot函数调用格式:ezplot(f)在默认区间-2πx2π和-2πy2π绘制f(x,y)=0的图形。ezplot(f,[xmin,xmax,ymin,ymax])在区间xminxxmax和yminyymax绘制f(x,y)=0的图形。ezplot(f,[a,b])在区间axb和ayb绘制f(x,y)=0的图形。MATLAB语言33对于参数方程x=x(t)和y=y(t),ezplot函数的调用格式为:ezplot(x,y)在默认区间0t2π绘制x=x(t)和y=y(t)的图形。ez