4.2MATLAB的三维图形绘制一、绘制三维线图命令plot3plot3是用来绘制三维曲线的,它的使用格式与二维绘图的plot命令很相似。语法:plot3(x,y,z,'s')%绘制三维曲线plot3(x1,y1,z1,'s1',x2,y2,z2,'s2',…)%绘制多条三维曲线说明:当x、y、z是同维向量时,则绘制以x、y、z元素为坐标的三维曲线;当x、y、z是同维矩阵时,则绘制三维曲线的条数等于矩阵的列数。s是指定线型、色彩、数据点形的字符串。二、绘制三维网格图和曲面图1.meshgrid命令为了绘制三维立体图形,MATLAB的方法是将x方向划分为m份,将y方向划分为n份,meshgrid命令是以x、y向量为基准,产生在x-y平面的各栅格点坐标值的矩阵。语法:[X,Y]=meshgrid(x,y)说明:X、Y是栅格点的坐标,为矩阵;x、y为向量。例如,将x(1×m)向量和y(1×n)向量转换为(n×m)的矩阵:2.三维网格图三维网格图是由一些四边形相互连接在一起所构成的一种曲面。语法:mesh(z)%画三维网线图mesh(x,y,z,c)说明:当只有参数z时,以z矩阵的行下标作为x坐标轴,把z的列下标当作y坐标轴;x、y分别为x、y坐标轴的自变量;当有x、y、z参数时,c是指定各点的用色矩阵,当c省略时默认用色矩阵是z的数据。如果x、y、z、c四个参数都有,则应该都是维数相同的矩阵。3.三维曲面图语法:surf(z)%画三维曲面图surf(x,y,z,c)说明:参数设置与mesh命令相同,c也可以省略。4.其它立体网线图和曲面图meshc命令为立体网状图加等高线;meshz为立体网状图加“围裙”。三、绘制三维旋转体1、球面图语法:sphere(n)%产生单位球面,n为旋转圆周上的分格线条数,默认n=20。[x,y,z]=sphere(n)%生成三个(n+1)*(n+1)阶的矩阵利用surf或mesh命令产生单位球面。2、柱面图语法:cylinder(r,n)%以母线向量r生成单位柱面,默认n=20,r=[1,1]。[x,y,z]=cylinder(r,n)%生成柱面的x,y,z数据矩阵,利用surf或mesh命令产生单位高度柱面。四、立体图形与图轴的控制1.网格的隐藏语法:hiddenoff%显示被遮盖的网格hiddenon%隐藏被遮盖的网格2.改变视角语法:view([az,el])%通过方位角和俯仰角改变视角说明:az表示方位角(azimuth),el表示俯仰角(elevation)默认值:az=-37.5°,el=30°五、色彩的控制1.色图(colormap)(1)RGB三元组RGB三元数组每行表示一种色彩,数组元素R、G、B在0~1之间取值,分别表示红、绿、蓝基色的相对亮度,如下表所示。•colormap([R,G,B])——色图设定函数•colormap色图函数——色图设定函数•colormap色图函数(m)——产生m×3的色图矩阵缺省64×3。表4.7 常用颜色的RGB成分RGB成分颜色Red(红色)Green(绿色)Blue(蓝色)Black(黑)000White(白)111Red(红)100Green(绿)010Blue(蓝)001Yellow(黄)110Magenta(品红)101Cyan(青)011Gray(灰)0.50.50.5Darkred(暗红)0.500Copper(铜色)10.620.4Aquamarine(碧绿)0.4910.83表4.8 预定义色图的函数表命令说明hsvHSV的颜色对照表(默认值),以红色开始和结束hot代表暖色对照表,黑、红、黄、白浓淡色cool代表冷色对照表,青、品红浓淡色summer代表夏天色对照表,绿、黄浓淡色gray代表灰色对照表,灰色线性浓淡色copper代表铜色对照表,铜色线性浓淡色autumn代表秋天颜色对照表,红、黄浓淡色winter代表冬天色对照表,蓝、绿浓淡色spring代表春天色对照表,青、黄浓淡色bone代表“X光片”的颜色对照表pink代表粉红色对照表,粉红色线性浓淡色flag代表“旗帜”的颜色对照表,红、白、蓝、黑交错色jetHSV的变形,以蓝色开始和结束prim代表三棱镜对照表,红、橘黄、黄、绿、蓝交错色2.色图的显示和处理(1)色图的显示•rgbplot命令语法:rgbplot(map)说明:map是表4.8中的各预定义色图函数,rgbplot命令可画出以行数为自变量红、绿、蓝相对亮度分量的直线图,反映R、G、B三色比重的变化。•colorbar命令以不同颜色来代表曲面的高度,垂直显示颜色标尺。(2)浓淡处理shading表4.9 shading命令的用法命令功能shadinginterp使小片根据四顶点的颜色产生连续的变化,或根据网线的线段两端产生连续的变化,这种方式着色细腻但最费时。shadingflat小片或整段网线的颜色是一种颜色。shadingfaceted在flat着色的基础上,同时在小片交接的边勾画黑色,这种方式立体表现力最强(默认方式)。【例】使用浓淡处理peaks函数曲面图。(3)亮度处理brighten语法:brighten(a)说明:当0=a=1时,色图加亮,当-1=a0时,色图变暗。4.3MATLAB的特殊图形绘制一、条形图——条形图常用于对统计的数据进行作图,特别适用于少量且离散的数据。语法:bar(x,y)%画条形图bar3(y,z,width,'参数')%画三维条形图【例】用条形图表示某年一月份中3日~6日连续四天的温度数据,y矩阵的各列分别表示平均温度、最高温度和最低温度,用条形图和三维条形图分别表示。x=3:6;y=[5.300013.00000.40005.100011.8000-1.70003.70008.10000.60001.50007.7000-4.5000]bar(x,y)%画条形图bar3(x,y)%画三维条形图图4.23(a)条形图(b)三维条形图二、直方图语法:hist(y,m)%统计每段的元素个数并画出直方图hist(y,x)%x是向量,用于指定所分每个数据段的中间值三、饼图饼图是用于显示向量中的各元素占向量元素总和的百分比。语法:pie(x,explode,’label’)%画二维饼图pie3(x,explode,’label’)%画三维饼图说明:x是向量;explode是与x同长度的向量,用来决定是否从饼图中分离对应的一部分块,非零元素表示该部分需要分离;’label’是用来标注饼图的字符串数组。分段的个数,默认为10•【例4.21】绘制四个季度支出额的饼图。y=[200100250400];%四个季度支出额explode=[0010];pie(y,explode,{'第一季度','第二季度','第三季度','第四季度'})四、离散数据图MATLAB提供了多个绘制离散数据的命令,有stem、stem3、stairs和scatter等。【例】使用几种绘制离散数据的命令来显示的离散数据。2sin()xyex五、等高线图语法:contour3(Z,n)%绘制Z矩阵的三维等高线contour(x,y,z,n)%绘制以x和y指定x、y坐标的二维等高线说明:n为等高线的条数,省略时为自动条数。x=0:0.1:2*pi;y=sin(x).*exp(-2*x);subplot(3,1,1)stem(x,y,'filled')%画火柴杆图subplot(3,1,2)stairs(x,y)%画阶梯图subplot(3,1,3)scatter(x,y)%画点图六、对数坐标和极坐标图1.对数坐标图形语法:semilogx(x,y,‘参数’)%绘制x为对数坐标的曲线semilogy(x,y,‘参数’)%绘制y为对数坐标的曲线loglog(x,y,‘参数’)%绘制x、y都为对数坐标的曲线2.极坐标图语法:polar(theta,radius,‘参数’)%绘制极坐标图说明:theta为相角,radius为离原点的距离。•【例4.23】求传递函数为的对数幅频特性曲线,横坐标为w,按对数坐标。w=logspace(-2,3,20);%频率w为0.01到1000Aw=1./(w.*sqrt((0.5*w).^2+1));%计算幅频Lw=20*log10(Aw);%计算对数幅频semilogx(w,Lw)title('对数幅频特性曲线'))1s5.0(s1)s(G七、复向量图1.compass命令compass绘制的是以原点为起点的一组复向量,因此又称为罗盘图。语法:compass(u,v)%画罗盘图compass(Z)说明:u、v分别为复向量的实部和虚部;当只有一个参数Z时,则相当于compass(real(Z),imag(Z))。2.feather命令feather绘制的是起点为(k,0)的复向量图,又称为羽毛图。语法:feather(u,v)%画羽毛图feather(Z)图4.31(a)罗盘图(b)羽毛图4.4对话框•——用于计算机与用户进行交互的界面1.输入信息对话框输入对话框为用户的输入信息提供了界面,使用inputdlg命令创建。语法:answer=inputdlg(prompt,title,lineno,defans,addopts)%创建输入对话框说明:answer返回用户的输入,为元胞数组;prompt为提示信息字符串,用引号括起来,为元胞数组;title为标题字符串,用引号括起来,可以省略;lineno用于指定输入值的行数,可以省略;defans为输入项的默认值,用引号括起来,是元胞数组可以省略;addopts指定对话框是否可以改变大小,取on或off,省略时为off表示不能改变大小。【例】利用输入对话框输入二阶系统的系数。程序分析:prompt、defans和p都是元胞数组。如果单击“Cancel”按钮,则返回空的元胞数组。prompt={'请输入阻尼系数','请输入无阻尼振荡频率'};defans={'0.707','1'};p=inputdlg(prompt,'输入参数',1,defans)2.输出信息对话框(1)消息框语法:msgbox(message,title,icon,icondata,iconcmap,…CreateMode)%创建消息框说明:message为显示的信息,可以是字符串或数组;title为标题,是字符串可省略;icon为显示的图标,可取值为“none”(无图标)、“error”(出错图标)、“help”(帮助图标)、“warn”(警告图标)或“custom”(自定义图标),也可省略;当使用“custom”时,用icondata定义图标的数据,用iconcmap定义图标的颜色映象;CreateMode为对话框的产生模式可省略,取值为“modal”(有模式)、“replace”(无模式可代替同名的对话框)、“non-modal”(默认为无模式)。(有模式对话框是指在对话框关闭之前,用户无法进行其它程序的运行)【上例续】使用消息框显示当阻尼系数大于1时的警告信息,如图所示。msgbox('阻尼系数输入范围出错','警告','warn')(2)其它对话框【例续】使用警告对话框显示当阻尼系数大于1时的警告信息。warndlg('阻尼系数输入范围出错','警告')【例续】使用出错提示框显示当阻尼系数小于0时出错信息。errordlg('阻尼系数输入出错','出错')【例续】使用帮助提示框显示阻尼系数的范围。helpdlg('欠阻尼系数应大于0小于1','帮助')(3)提问提示框【例续】使用提问提示框使用户确认。button=questdlg('是否确认?','Areyousure?','Yes','No','Yes')程序分析:有两个按钮,默认的指定按钮为“Yes”。即当用户按下回车键时,返回“Yes”,当用户单击按钮“No”时,返回“No”。3.文件管理对话框(1)打开文件对话框uigetfile语