1、MATLAB程序设计,主讲人:潘伟,西华师范大学计算机学院通信专业系列课程,MATLAB计算的可视化和GUI设计,第四章,-基本图形处理功能,Matlab程序设计,第一节 引导,离散数据和离散函数的可视化 连续函数的可视化 可视化的一般步骤,Matlab程序设计,离散数据和离散函数的可视化,任何二元实数标量对(xa,ya)可用平面上的一个点表式; 任何二元实数向量对(x,y)可用平面上的一组点表示。 对于离散实函数yn=f(xn),当 xn以递增(或递减)次序取值时,根据函数关系可求得同样数目的yn,用向量形式可记述为x=x1,x2,xNT, y=y1,y2,yNT。当把这向量对用直角坐标中的
2、点序列图示时,就实现了离散函数的可视化。 注意:图形不能表现无限区间上的函数关系。,Matlab程序设计,连续函数的可视化,进行连续函数可视化必须先在一组离散自变量上计算相应应的函数值,并把这一组“数据对”用点图示。但这些离散的点不能表现函数的连续性。 为了表示离散点之间的函数情况,有两种常用处理方法: 对区间进行更细的分割,计算更多的点,去近似表现函数的连续变化; 把两点用直线连接,近似表现两点间的(一般是非线性的)函数性状。 在MATLAB中,以上两种表现方法都可以采用。 注意:倘若自变量的采样点数不足够多,则无论哪种方法都不能真实地反映原函数。,Matlab程序设计,可视化的一般步骤,M
3、atlab程序设计,可视化的一般步骤,Matlab程序设计,可视化的一般步骤,Matlab程序设计,可视化的一般步骤,Matlab程序设计,第二节 二维曲线绘图的基本操作,基本绘图函数 曲线的色彩、线型和数据点形 坐标、刻度和分格线控制 图形标识 多次叠绘、双纵坐标和多子图 交互式图形指令,Matlab程序设计,基本绘图函数,1、plot的基本调用格式(二维曲线绘图) 2、对数坐标绘图 3、极坐标绘图 4、复数绘图,Matlab程序设计,plot的基本调用格式,plot(X,s) X是实向量时,以该向量元素的下标为横坐标、元素值为纵坐标画出一条连续曲线。 X是实矩阵时,则按列绘制每列元素值相对
4、其下标的曲线。图中曲线数等于X阵列数。 X是复数矩阵时,则按列分别以元素实部和虚部为横、纵坐标绘制多条曲线。 s是用来指定线型、色彩、数据点形的选项字符串。它可以缺省,此时线形、色彩将由MATLAB的默认设置确定。,Matlab程序设计,plot(X,Y,s) X、Y是同维向量时,绘制以X、Y元素为横、纵坐标的曲线。 X是向量,Y是有一维与X等维的矩阵时,则绘制出多根不同色彩的曲线。曲线数等于Y阵的另一维数,X被作为这些曲线的共同横坐标。 X是矩阵,Y是向量时,情况与上相同,只是曲线都以Y为共同纵坐标。 X、Y是同维矩阵时,则以X、Y对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。
5、 s的意义与其在plot(X,s)格式中的意义相同。,当x,y中有复数时,忽略其虚部,Matlab程序设计,plot(X1,Y1,s1,X2,Y2,s2,) 在此格式中,每个绘线“三元组”(X,Y,s)的结构和作用,与plot(X,Y,s) 相同。不同的“三元组”之间没有约束关系。,Matlab程序设计,例1 二维曲线绘图基本指令演示,Matlab程序设计,对数坐标绘图,对数坐标绘图分为x轴对数(semilogx)、 y轴对数(semilogy)及双对数(loglog)三个函数,其调用格式与二维曲线绘图函数plot相似。,Matlab程序设计,极坐标绘图,polar(theta,rho,s)
6、按照s所定义的线形、标记点和颜色绘制由theta、rho所确定的曲线,其中绘图参数theta、rho分别为角度和半径。,Matlab程序设计,复数绘图,当使用plot函数绘制复数图形时,通常虚部是忽略的。然而有一种特殊情况,即当plot的参数只有一个复变量z时,则绘制的图形为实部对于虚部的关系图(复平面上的一组点)。这时plott(z)等价于polt(real(z),imag(z),其中z为一个复矢量。,Matlab程序设计,色彩、线型和点形,色彩和线型,Matlab程序设计,数据点形,Matlab程序设计,坐标控制,Matlab程序设计,分格线和坐标框,grid 是否画分格线的双向切换指令(
7、使当前分格线状态翻转)grid on 画出分格线grid off 不画分格线 box 坐标形式在封闭式和开启式之间切换指令box on 使当前坐标呈封闭形式box off 使当前坐标呈开启形式,Matlab程序设计,图形标识,图形标识包括:图名(Title)、坐标轴名(Label)、图形注释(Text)和图例(Legend)。 标识指令的最简捷使用格式如下:title(S) 书写图名xlabel(S) 横坐标轴名ylabel(S) 纵坐标轴名legend(S1,S2,) 绘制曲线所用线型、色彩或数据点形图例text(xt,yt,S) 在图面(xt,yt)坐标处书写字符注释,Matlab程序设计
8、,legend,legend(arg,pos) 在指定位置建立图例 legend off 擦除当前图上的图例 说明: 输入宗量arg是图例中的说明文字注释。 输入宗量pos是图例在图上位置的指定符,它可取下表中的值。 Legend在图形窗中产生后,可用鼠标对其进行拖拉,即把鼠标光标移到图例上,按住鼠标左键;图例将随鼠标移动,直到满意位置;放开按键便完成操作。,Matlab程序设计,精细指令形式,Matlab程序设计,第三节 多次叠绘、双纵坐标和多子图,多次叠绘 双纵坐标图 多子图,Matlab程序设计,多次叠绘,前面已介绍过plot在同一次调用中画多条曲线的功能。实际应用中,还会遇到在已经存在
9、的图上再绘制一条或多条曲线的情况。为此,MATLAB提供了以下指令:hold on 使当前轴及图形保持而不被刷新,准备接受此后将绘制的新曲线hold off 使当前轴及图形不再具备不刷新的性质hold 当前图形是否具备刷新性质的双向切换开关。,Matlab程序设计,双纵坐标图,在实际应用中常常提出这样一种需求:把同一自变量的两个不同量纲、不同数量级的函数量的变化绘制在同一张图上。plotyy(X1,Y1,X2,Y2) 以左、右不同纵轴绘制X1-Y1,X2-Y2两条曲线plotyy(X1,Y1,X2,Y2,FUN) 以左、右不同纵轴把X1-Y1,X2-Y2绘制成FUN指定形式的两条曲线ploty
10、y(X1,Y1,X2,Y2,FUN1,FUN2) 以左、右不同纵轴把X1-Y1,X2-Y2绘制成FUN1,FUN2指定的不同形式的两条曲线,Matlab程序设计,多子图,MATLAB允许用户在同一图形窗中布置几幅独立的子图,具体指令是:subplot(m,n,k) 使(mn)幅子图中的第k幅成为当前图subplot(position,left bottom width height) 在指定位置上开辟子图,并成为当前图,Matlab程序设计,交互式图形指令,x,y=ginput(n) 用鼠标从二维图形上获取n个 点的数据坐标(x,y)。- 该指令仅适用于二维图形。- 具体操作方法:指令运行后,
11、会把当前图形从后台调到前台,同时鼠标光标变为十字叉;用户可移动鼠标,使十字叉移到待取坐标点;点动鼠标左键,便获得该点数据;此后,用同样的方法,获取其余点的数据;当n个点的数据全部取到后,图形窗便退回后台,机器回到ginput执行前的环境。,Matlab程序设计,gtext(arg) 用鼠标把字符串或字符串异质(元胞)数组arg放置到图形上 - 该指令对二维、三维图形都适用。 - 具体操作方法:指令运行后,当前图形窗自动由后台转为前台,鼠标光标变为十字叉;移动鼠标,使十字叉移到希望的位置;点动鼠标右键,arg所承载的字符将被放在紧靠十字叉点的“第一象限”位置。,Matlab程序设计,第三节 三维
12、绘图的基本操作,三维线图指令plot3 三维网线图和曲面图 透视、镂空和裁切,Matlab程序设计,三维线图指令plot3,在三维图形指令中,plot3最易于理解,它使用格式与plot十分相识。具体如下: plot3(X,Y,Z,s) plot3(X1,Y1,Z1,s1,X2,Y2,Z2,s2,),Matlab程序设计,三维网线图和曲面图,三维网线图和曲面图的绘制比线图稍显复杂,主要表现于:绘图数据的准备;三维图形的色彩、明暗、光照和视点处理。三维图形的数据准备网线图、曲面图基本指令格式,Matlab程序设计,三维图形的数据准备,画函数z=f(x,y)所代表的三维空间曲面,需要做以下数据准备:
13、(1)确定自变量x,y的取值范围和间隔。x=x1:dx:x2;y=y1:dy:y2;(2)构成xy平面上的自变量“格点”矩阵。X,Y=meshgrid(x,y);(3)计算在自变量采样“格点”上的函数值,即Z=f(X,Y)。【说明】X由x按行复制而成,其行数为y元素的个数;Y由y按列复制而成,其列数为x元素的个数。,Matlab程序设计,网线图、曲面图基本指令格式,mesh(Z) 以Z矩阵列、行下标为x,y轴自变量,画网线图 mesh(X,Y,Z) 最常用的网线图调用格式 mesh(X,Y,Z,C) 最完整调用格式,画由C指定用色的网线图 surf(Z) 以Z矩阵列、行下标为x,y轴自变量,画
14、曲面图 surf(X,Y,Z) 最常用的曲面图调用格式 surf(X,Y,Z,C) 最完整调用格式,画由C指定用色的曲面图,Matlab程序设计,透视、镂空和裁切,图形的透视,MATLAB在采用缺省设置画mesh图形时,对叠压在后面的图形采取了消隐措施。但有时却需要透视效果。为此,MATLAB提供了一个控制消隐的指令如下:hidden off 透视被叠压的图形hidden on 消隐被叠压的图形,Matlab程序设计,图形的镂空,利用“非数”NaN,对图形进行镂空处理。,裁切,由处理的图形不会产生切面。如果为了看清图形而需要表现切面,那么应该把被切部分强制为零。,Matlab程序设计,第四节
15、专业绘图功能,杆图 条形图 直方图 饼 图 阶梯图 表面渲染 彩色分散点图,Matlab程序设计,杆 图,stem:绘制杆图,stem3:绘制三维杆图,各点之间不用线连接,每个点对应于一条垂直于横轴的线段。线段的上端点可以采用不同的形式。,stem(y) stem(x,y) stem(.,filled) stem(.,linespec),Matlab程序设计,二维条形图,bar(y) bar(x,y) bar(.,width):默认, width=0.8 bar(.,grouped):分组式条形图 bar(.,stacked):重叠式条形图 bar(.,Linespec):指定条形颜色 rgb
16、ymckw,bar:绘制垂直条形图,y为向量:每个元素绘制一个条形 y为mxn矩阵:按行分组,每组n个垂直的条形图。,barh:绘制水平条形图,Matlab程序设计,根据矩阵中的每个元素绘制一个长方体。各行元素沿x轴分布,各列元素沿y轴分布,用z轴表示元素的大小。,bar3:绘制三维垂直条形图,三维条形图,Detached: produces the default detached bar chart. Grouped: produces a grouped bar chart. Stacked: produces a stacked bar chart.,bar3h:绘制三维水平条形图,各
17、列元素沿z轴分布,用y轴表示元素的大小。,Matlab程序设计,直方图,hist,直方图是一种统计运算的结果,它的横轴是数据的幅度,纵轴对应各个幅度数据出现的次数,直方图的纵轴没有负数。,hist(y) hist(y,m):默认只绘制10个条形,通过m指定绘制条形的个数。,Matlab程序设计,饼图用于表示矢量或矩阵中和元素所占的比例。,饼 图,pie3:绘制三维饼图,pie:绘制平面饼图,pie(x):使用x中的元素绘制饼图,x中的每一元素用饼图中的一个扇区表示。 pie(x,explode):把一些扇区从饼图中分离再来。explode为与x相同尺寸的矩阵。,如果x中和元素之和小于1,将绘制
18、不完整饼图。,Matlab程序设计,阶梯图,stairs:绘制阶梯图。,stairs(y) stairs(x,y),Matlab程序设计,颜色映象,MATLAB有一个叫颜色映象的数据结构来代表颜色值。颜色映象定义为一个有三列和若干行的矩阵。利用0到1之间的数,矩阵的每一行都代表了一种色彩。任一行的数字都指定了一个RGB值,即红、绿、蓝三种颜色的强度,形成一种特定的颜色。,colormap(M)将矩阵M作为当前图形窗口所用的颜色映象。default装入了缺省的颜色映象(hsv),Matlab程序设计,简单颜色,Matlab程序设计,按缺省,上面所列的各个颜色映象产生一个643的矩阵,指定了64种
19、颜色RGB的描述。,Matlab程序设计,表面渲染,shading:用于表面色彩渲染。,shading flat网格的每个线段和表面都有相同的颜色。shading faceted在flat的基础上绘制黑色的网格线。shading interp网格的每个线段和表面上的颜色都是变化的,通过对线段或表面上的颜色进行插值,使得整个表面上的颜色看上去是连续变化的。,Matlab程序设计,彩色分散点图,scatter:绘制可以改变点的大小和颜色的分散点图。,scatter(x,y):类似于plot(x,y)scatter(x,y,s):s指定点的大小scatter(x,y,s,c):c指定点的颜色scat
20、ter(,filled):填充绘图点scatter(,M):M改变点的形状,Matlab程序设计,图形的缩放,zoom:对图形进行缩放操作。,zoomzoom onzoom offzoom(factor)zoom outzoom xonzoom yon,在允许缩放操作的情况下,鼠标左击一下要放大的区域,图形就放大一倍,鼠标右击一下,图形缩小一倍。,Matlab程序设计,图形窗功能简介,图形窗除了用于显示图形,还可对所显示的图形进行编辑。下图为图形窗工具条上MATLAB所特有的七个按键,它们用来对图形进行交互操作。,Matlab程序设计,函数绘图的简捷指令,这些指令的特点:无需数据准备,直接画出
21、字符串函数或符号函数的图形。这一系列指令名称的前两个字符冠以“ez”,其含义就是“Easy to”。,Matlab程序设计,ezplot(F):在-2pi,2pi自变量范围中,绘制F曲线 ezplot(F,xmin,xmax):在指定自变量范围,绘制F曲线 ezplot(F,xmin,xmax,fig):在fig指定的图形窗内,在指定自变量范围,绘制F曲线 Ezpolar(f):在0,2pi自变量范围中,绘制极坐标曲线 ezpolar(f,a,b):在0,2pi自变量范围中,绘制极坐标曲线,一元函数简捷绘图指令,Matlab程序设计,二元函数简捷绘图指令,ezsurf(F,dom_f,ngrid) 在指定矩形域上,用指定格点 数画二元函数曲面 ezsurf(F,dom_f,circ) 在圆域上,画二元函数曲面 ezsurf(x,y,z,dom_st,ngrid) 在指定矩形域上,用二 元参量方式画曲面 ezsurf(x,y,z,dom_st, circ) 在圆域上,用二元参量 方式画曲面 例1:在园域上画的图形 例2:使用球坐标参量画部分球壳,Matlab程序设计,思考:,