第5章 数据可视化
不管根据计算得到的数据堆或是符号堆是多么的准确,人们还是很难从这一大堆原始的数据和符号中发现它们的具体物理含义或是内在规律,而数据图形恰能使视觉感官直接感受到数据的许多内在本质,发现数据的内在联系。因此数据可视化是一项非常重要的技术。
MATLAB可以表达出数据的二维、三维和四维的图形。通过对图形的线型、立面、色彩、光线、视角等属性的控制,可把数据的内在特征表现得更加细腻完善。下面将向读者介绍这些图形绘制和图形处理的命令。
5.1 二维绘图
二维图形的绘制是MATLAB语言图形处理的基础,也是在绝大多数数值计算中广泛应用的图形方式之一。本小节主要向读者介绍plot、fplot、ezplot三个基本的二维绘图命令。
5.1.1 plot命令
绘制二维图形最常用的函数就是plot函数,通过不同形式的输入,该函数可以实现不同的功能。其调用格式有如下3种:
1.plot(y)
此命令中参数y可以是向量、实数矩阵或复数向量。若y为向量,则绘制的图形以向量索引为横坐标值、以向量元素的值为纵坐标值;若y为实数矩阵,则绘制y的列向量对其坐标索引的图形;若y为复向量,则plot(y)相当于plot(real(y), imag(y)。在后面介绍的两种调用格式中,元素的虚部将被忽略。
例如用plot(y)命令绘制向量,如图5-1所示,具体代码设置如下:
图5-1 plot(y)绘制向量
注意:图5-1中横坐标的范围不是[1,10],而是[1,91],因为plot(y)以向量索引为横坐标值。
例如用plot(y)命令绘制矩阵,如图5-2所示,具体代码设置如下:
图5-2 plot(y)绘制矩阵
例如用plot(y)命令绘制复向量,如图5-3所示,具体代码设置如下:
图5-3 plot(y)绘制复向量
2.plot(x,y)
x,y均可为向量和矩阵,其中有3种组合用于绘制连线图。
x,y均为n维向量时,绘制向量y对向量x的图形,即以x为横坐标,y为纵坐标。
x为n维向量,y为m×n或n×m的矩阵时,该命令将在同一图内绘得m条不同颜色的连线。图中以向量x为m条连线的公共横坐标,纵坐标为y矩阵的m个n维分量。
x,y均为m×n矩阵时,将绘得n条不同颜色的连线。绘制规则为:以x矩阵的第i列分量作为横坐标,矩阵y的第i列分量作为纵坐标,绘得第i条连线。
例如用plot(x,y)绘制双向量,如图5-4所示,代码设置如下:
图5-4 plot(x,y)绘制双向量
例如用plot(x,y)绘制向量和矩阵,如图5-5所示,代码设置如下:
图5-5 plot(x,y)绘制向量和矩阵
例如用plot(x,y)绘制双矩阵,如图5-6所示,代码设置如下:
图5-6 plot(x,y)绘制双矩阵
3.plot(x,y,s)
此格式用于绘制不同的线型、点标和颜色的图形,其中s为字符,可以代表不同的线型、点标和颜色。常见的可用字符及其意义如表5-1所示。
表5-1 二维绘图的图形常用设置选项
例如用plot(x,y,s)绘图,如图5-4所示,代码设置如下:
图5-7 plot(x,y,s)绘图
5.1.2 fplot命令
前面介绍的plot命令是将从外部输入或通过函数数值计算得到的数据矩阵转化为连线图。而在实际的应用中,用户可能并不知道某一个函数随自变量变化的趋势,此时若采用plot命令来绘图,则有可能会因为自变量的取值间隔不合理而使曲线图形不能反应出自变量在某些区域内函数值的变化情况。当然用户可以将自变量间隔取得足够小以体现函数值随自变量变化的精确曲线,但是这样会使数据量变大。
而fplot命令就可以很好地解决这个问题。fplot命令用于指导如何通过函数来取得绘图的数值点矩阵。该命令通过内部的自适应算法来动态决定自变量的取值间隔,当函数值变化缓慢时,间隔取大一点;变化剧烈时(即函数的二阶导数很大),间隔取小一点。
该命令的使用格式如下:
下面介绍其中各项参数的含义。
· function:待绘制的函数的名称;
· limits:定义x轴(自变量)的取值范围,或x轴和y轴(应变量)的范围[xmin xmax],[xmin xmax ymin ymax];
· LineSpec:定义绘图的线型、颜色和数据点等(如表5-1所示);
· tol:相对误差容忍度,默认值为2e-3;
· n:当n≥1时,至少绘制n+1个点,默认值为1。最大的步长限制为(1/n)*(xmax-xmin);
· axes handle:坐标轴句柄,函数的图形将绘制在这个坐标系中;
· P1,P2…:向函数传递参数值。
【例如】
· 创建函数,并保存为myfun.m,具体代码设置如下:
· 用fplot命令求得坐标点,并按同样大小创建一个等间隔坐标点,代码设置如下:
· 作图比较fplot命令与plot命令,代码设置如下∷
用fplot命令和plot命令绘制出的结果如图5-8和图5-9所示。
图5-8 fplot命令绘图结果
图5-9 plot命令绘图结果
5.1.3 ezplot命令
ezplot命令也是用于绘制函数在某一自变量区域内的图形。该命令的使用格式如下:
当f=f(x)时,各参数的含义如下。
· ezplot(f):绘制表达式f=f(x)在默认区域2pi<x<2.pi内的图形,f为函数句柄;
· ezplot(f,[min,max]):绘制表达式f=f(x)在min<x<max.区域内的图形;
当f=f(x,y)时,各参数的含义如下。
· ezplot(f):绘制函数f(x,y)=0在默认区域2pi<x<2.pi,2pi<y<2.pi内的图形;
· ezplot(f,[xmin,xmax,ymin,ymax]):绘制f(x,y)=0在区域xmin<x<xmax、ymin<y<ymax内的图形;
· ezplot(f,[min,max]):绘制f(x,y)=0在区域min<x<maxa、min<y<max内的图形;
注意:如果函数或表达式的变量名不是x,y,如zplot('u^2-v^2-1',[-3,2,-2,3])就是绘制u^2-v^2-1=0在-3<u<2,-2<v<3区域内的图形。
· ezplot(x,y):绘制参数方程组x=x(t),y=y(t)在默认区域0<t<2.*pi内的图形;
· ezplot(x,y,[tmin,tmax]):绘制x=x(t),y=y(t)在区域tmmin<t<tmax内的图形;
· ezplot(…,figure_handle):在句柄为figure_handle的窗口中绘制给定函数在给定区域内的图形;
· ezplot(axes_handle,…):在句柄为axes_handle的坐标系上绘制图形;
· h=ezplot(…):返回直线对象的句柄到h变量中。
【例如】
绘制非显式函数x2+y2-4=0在区域[-3,-3,-3,3]内的图形。
用ezplot命令绘制出来的结果如图5-10所示。
图5-10 ezplot命令作图
5.2 三维绘图
在实际的工程计算中常常需要将结果表示成三维图形,MATLAB语言为此提供了相应的三维图形的绘制功能。这些绘制功能与二维图形的绘制有很多类似之处,其中曲线的属性设置完全相同。最常用的三维绘图是绘制三维曲线图、三维网格图和三维曲面图3种基本类型,相应的MATLAB命令为plot3、mesh和surf,下面分别介绍它们的具体使用方法。
5.2.1 plot3命令
与plot类似,plot3是三维绘图的基本函数,其调用格式如下:
其中X1,Y1,Z1为向量或矩阵,LineSpec定义曲线线型、颜色和数据点等(参见表5-1),PropertyName为线对象的属性名,PropertyValue为相应属性的值,h是用于存放曲线簇中每一个线对象的句柄的变量。
当X1,Y1,Z1为长度相同的向量时,plot3命令将绘得一条分别以向量X1,Y1,Z1为x,y,z轴坐标值的空间曲线;
当X1,Y1,Z1均为m×n的矩阵时,plot3命令将绘得m条曲线。其第i条空间曲线分别以X1,Y1,Z1矩阵的第i列分量为x,y,z轴坐标值的空间曲线。
例如用plot3命令绘制螺旋线,如图5-11所示,代码设置如下:
图5-11 螺旋线
例如用plot3命令绘制向量,如图5-12所示,具体代码如下:
图5-12 plot3绘制向量
5.2.2 mesh命令
该命令与plot3不同的是它可以绘出在某一区间内完整的曲面,而不是单根曲线。其调用格式如下:
其中C用于定义颜色,如果没有定义C,则mesh(X,Y,Z)绘制的颜色随Z值(即曲面高度)成比例变化。X和Y必须均为向量,若X和Y的长度分别为m和n,则Z必须为m×n的矩阵,也即[m,n]=size(Z),在这种情况下,网格线的顶点为(X(j),Y(i),Z(i,j));若参数中没有提供X,Y,则将(i,j)作为Z(i,j)的X,Y轴坐标值。
例如用mesh函数绘制三维曲线,如图5-13所示,代码设置如下:
图5-13 mesh函数绘制三维曲面
例如用mesh(z)函数绘制三维曲面,如图5-14所示,代码设置如下:
图5-14 mesh(z)函数绘制三维曲面
5.2.3 surf命令
该命令的调用方法与mesh命令类似,不同的是mesh函数绘制的图形是一个网格图,而surf命令绘制得到的是着色的三维曲面。着色的方法是在得到相应的网格后,对每一个网格依据该网格所代表的节点的色值(由变量C控制)来定义这一网格的颜色。调用方式如下:
其中各个参数意义与mesh命令中的相同。
例如分别用surf命令和mesh命令绘制着色曲面图进行比较,如图5-15和图5-16所示。代码设置如下:
图5-15 用surf命令绘制着色曲面图
图5-16 mesh命令绘制相同的数据
5.2.4 基本三维绘图命令的改进命令
前面介绍了3个基本的三维绘图命令,下面向读者介绍另外几个常用命令,它们对基本的三维绘图命令增加了一些特别的处理图形的功能。
1.meshgrid、meshc和meshz
meshgrid命令的作用是将给定的区域按一定的方式划分成平面网格,该平面网格可以用来绘制三维曲面,调用方法如下:
其中x和y为给定的向量,是用来定义网格划分区域的,也可定义网格划分方法;X,Y用来存储网格划分后的数据矩阵。
meshc是在用mesh命令绘制的三维曲面图下绘出等高线,调用方式与mesh相同。
例如用meshc命令绘制三维曲面,如图5-17所示。代码设置如下:
图5-17 meshc命令绘制三维曲面
meshz是在mesh函数的作用之上增加绘制边界面的功能,调用方式与mesh一样。
例如用meshz命令绘制三维曲面,如图5-18所示。代码设置如下:
图5-18 meshz命令绘制三维曲面
2.surfc
surfc与meshc类似,在surf命令绘制的图形上加绘等高线,调用方式与surf命令一样。
例如用surfc命令绘制三维曲面,如图5-19所示。代码设置如下:
图5-19 surfc命令绘制三维曲面
3.waterfall
该命令用于绘制形似瀑布流水形状的网线图,调用格式与mesh相同。
例如用waterfall命令绘制三维曲面,如图5-20所示。代码设置如下:
图5-20 waterfall命令绘制三维曲面
5.3 特殊图形
5.3.1 二维特殊图形函数
常见的特殊二维图形函数如表5-2所示。
表5-2 二维特殊图形函数
表中的函数均有不同的调用方法,下面通过几个示例向读者介绍其中几个常用的命令,其他函数的使用方法读者可以查阅MATLAB 7.0的在线帮助。
【bar命令】
该命令用于绘制二维垂直条形图,用垂直条形显示向量或矩阵中的值。调用格式如下:
【示例1】
用函数bar绘制的条形图如图5-21所示。
图5-21 条形图
【示例2】
函数bar绘图命令如图5-22所示。
图5-22 bar绘图命令
【pie命令】
该命令用于绘制饼形图。调用格式如下:
【示例1】
用pie命令绘制饼状图如图5-23所示。
图5-23 pie绘制饼状图
【示例2】
函数pie绘制命令如图5-24所示。
图5-24 pie绘图命令
【hist命令】
该命令用于绘制二维条形直方图,可以显示出数据的分布情况。所有向量y中的元素或者是矩阵y的列向量中的元素是根据它们的数值范围来分组的,每一组作为一个条形进行显示。条形直方图中的x轴反映了数据y中元素数值的范围,直方图的y轴显示出参量y中的元素落入该组的数目。调用格式如下:
【示例】
用hist命令绘制图形如图5-25所示。
图5-25 hist命令绘图
【contour命令】
该命令用于绘制等高线图。调用格式如下:
其中,输入变量Z必须为一数值矩阵,是必须输入的变量;n为所绘图形等高线的条数;v为向量,等高线条数等于该向量的长度,并且等高线的值为对应向量的元素值;c为等高线矩阵;h为等高线的句柄。若没有选择,系统将自动为矩阵z绘制等高线图。类似的函数有contourf,用以绘制填充的等高线图,调用格式与contour相同。
【示例】
用contour命令绘制等高线如图5-26所示。
图5-26 contour命令绘制等高线
【quiver命令】
该命令用于绘制矢量图或速度图,绘制向量场的形状。调用格式如下:
【示例】
用quiver绘制矢量图如图5-27所示。
图5-27 quiver命令绘制矢量图
【comet命令】
该命令用于绘制二维彗星图。彗星图为彗星头(一个小圆圈)沿着数据点前进的动画,彗星体为跟在彗星头后面的痕迹,轨道为整个函数的实线。要注意的是,由命令comet生成的轨迹图的擦除模式(EraseMode)属性值为none,该属性使得用户不能打印该图形(只能得到彗星头),且当用户改变窗口的大小时,动画将消失。调用格式如下:
【示例】
用comet命令绘制彗星图如图5-28所示。
图5-28 comet命令绘制彗星图
【errorbar命令】
该命令用于绘制沿着一曲线画误差棒形图。误差棒为数据的置信水平或者为沿着曲线的偏差。命令输入参数为矩阵时,则按列画出误差棒。调用格式如下:
【示例】
用errorbar命令绘制误差棒形图如图5-29所示。
图5-29 errorbar命令绘制误差棒形图
5.3.2 特殊的三维图形函数
特殊的三维图形函数如表5-3所示。
表5-3 三维特殊图形函数
对比表5-2和表5-3可以发现其中有许多的绘图命令函数名很接近,只是在后面加了一个数字3,它代表是绘制相应的三维图形,其实现的功能和调用方法与对应的二维绘制函数基本相同,在这里就不再做详细介绍,请读者自己查阅MATLAB 7.0的在线帮助。
【cylinder命令】
该命令用于绘制圆柱图形。调用格式如下:
【示例1】
用cylinder命令绘制圆柱图形如图5-30所示。
图5-30 cylinder命令绘制圆柱图形
【示例2】
用cylinder(r)命令绘制圆柱图形如图5-31所示。
图5-31 cylinder(r)命令绘制圆柱图
【sphere命令】
该命令用于生成球体。调用格式如下:
【示例】
用sphere命令绘制球体如图5-32所示。
图5-32 sphere命令绘制球体
5.3.3 特殊坐标轴的图形函数
前面已介绍了基本的二维绘图函数的使用,但它们的坐标轴刻度均为线性刻度。当实际的数据出现指数变化时,指数变化就不能直观的从图形上体现出来,而且在进行数值比较过程中经常会遇到双纵坐标显示的要求。为了解决这些问题,MATLAB提供了相应的绘图函数。
- semilogx
用该函数绘制图形时x轴采用对数坐标。若没有指定使用的颜色,当所画线条较多时,semilogx将自动使用由当前轴的ColorOrder和LineStyleOrder属性指定的颜色顺序和线型顺序来画线。调用方法如下:
【示例】
用semilogx和plot绘制y=log10(x)的图形如图5-33和图5-34所示。
图5-33 semilogx绘制y=log10(x)
图5-34 plot绘制y=log10(x)
- semilogy
用该函数绘制图形时y轴采用对数坐标。调用格式与semilogx基本相同。
【示例】
用semilogy和plot绘制y=10.^x的图形如图5-35和图5-36所示。
图5-35 semilogy绘制y=10.^x
图5-36 plot绘制y=10.^x
- loglog
用该函数绘制图形时x和y轴均采用对数坐标。调用格式与semilogx基本相同。
【示例】
用loglog和plot绘制图形如图5-37和图5-38所示。
图5-37 loglog绘制图形
图5-38 plot绘制图形
- plotyy
用该函数在双y轴坐标系中作图,调用方法如下:
【示例】
用plotyy绘制图形如图5-39所示。
图5-39 plotyy绘制图形
5.极坐标、柱坐标和球坐标下绘制图形
(1)在极坐标系中绘图
【polar命令】
该命令用于画极坐标图。它接受极坐标形式的函数rho=f(θ),在笛卡尔坐标系平面上画出该函数,且在平面上画出极坐标形式的格栅。调用格式如下:
【示例】
用polar命令绘制渐开线,如图5-40所示。
图5-40 polar命令绘制图形
(2)在柱坐标系中绘图
【pol2cart命令】
该命令用于将极坐标值或柱坐标值转换成直角坐标系下的坐标值,其转换规则如图5-41所示。然后使用plot3、mesh等命令绘图,即在直角坐标系下绘制使用柱坐标值描述的图形。调用格式如下:
图5-41 极坐标和柱坐标与直角坐标转换的规则
【示例】
用pol2cart命令绘制出的图形如图5-42所示。
图5-42 pol2cart命令绘制图形
(3)在球坐标系中绘图
【sph2cart命令】
该命令用于将球坐标值转换成直角坐标系下的坐标值,其转换规则如图5-43所示。然后使用plot3、mesh等命令绘图,即在直角坐标系下绘制使用球坐标值描述的图形。调用格式如下:
图5-43 柱坐标与直角坐标转换的规则
(4)不同坐标系之间的转换
【cart2pol命令】
该命令用于将直角坐标系下的坐标值转换成极坐标系和柱坐标系下的坐标值,转换规则如图5-41所示。其调用格式如下:
【cart2sph命令】
该命令用于将直角坐标系下的坐标值转换成球坐标系下的坐标值,转换规则如图5-43所示。其调用格式如下:
5.3.4 四维表现图
对于三维图形,可以利用z=z(x,y)的确定或不确定的函数关系来绘制图形,但此时自变量只有两个,也即二维的。当自变量有3个时,定义域是整个三维空间,而我们所处的空间和思维局限性,在计算机的屏幕上只能表现出三个空间变量,因此再没有什么空间变量来表示函数的值了。为此,MATLAB通过颜色来表示这存在于第四维空间的值,它由函数slice实现。其调用格式如下:
【示例】
在-2≤x≤2,-2≤y≤2,-2≤z≤2区域内可视化函数
用silice命令绘制出的切片图如图5-44所示。
图5-44 silice绘制切片图
若要显示颜色和所代表数值(在上例中即指V的函数值)的关系,可以通过colorbar函数命令来显示。
5.4 图形处理
MATLAB 7.0除了提供强大的绘图功能外,它还提供了强大的图形处理的功能。下面对这些相关的技术进行具体的介绍。
5.4.1 图形标注
从前面的示例图形可以看出,在绘制图形时,系统会自动为图形进行简单的标注。MATLAB语言还提供了丰富的图形标注函数供用户自由标注所绘的图形。
1.坐标轴标注和图形标题
对坐标轴进行标注和给图形填加标题的函数主要有xlabel、ylabel、zlabel和title等,它们的调用格式基本相同,具体代码如下:
其中string是标注所用的说明语句,fname是一个函数名,系统要求该函数必须返回一个字符串作为标注语句。'PropertyName',PropertyValue用于定义相应标注文本的属性和属性值,包括字体大小、字体名和字体粗细等。
【示例】
通过上述示例代码实现对坐标轴和图形的标注,如图5-45所示。
图5-45 坐标轴标注示例
在标注过程中经常会遇到特殊符号的输入问题,如上例中pi的输入,MATLAB语言提供了相应的字符转换。常见的转换如表5-4所示。
表5-4 MATLAB7.0中常见的字符转换
用户还可以对文本标注文字进行显示控制,具体方式如下:
· \bf:黑体;
· \it:斜体;
· \sl:透视。
· \rm:标准形式;
· \fontname{fontname}:定义标注文字的字体;
· \fontsize{fontsize}:定义标注文字的字体大小。
2.用文本标注图形
在MATLAB语言中可以使用text或gtext命令对图形进行文本注释。使用text进行标注时需要定义用于注释的文本字符串和放置注释的位置,而使用gtext命令进行标注却可以使用鼠标来选择标注文字放置的位置。调用格式如下:
在定义标注放置的位置可以通过函数的计算值来确定,而且标注中还可以实时地调用返回值为字符串的函数,如num2str等,利用这些函数可以完成较为复杂的文本标注。
【示例】
用text命令标注的图形如图5-46所示。
图5-46 text命令标注图形
【示例】
执行gtext命令后出现“+”形,如图5-47所示。执行后的结果如图5-48所示。
图5-47 执行gtext命令后出现“+”型
图5-48 gtext命令执行结果
除了上面示例中的一些标注功能外,用户还可以控制标注的对齐方式和添加多行标注文字。下面通过一个示例来说明这些功能的效果,具体的控制方法请查阅帮助。
【示例】
通过上述示例代码来控制标注的对齐方式和添加多行标注文字,其效果如图5-49所示。
图5-49 复杂的文本标注示例
3.图例标注
在对数值结果进行绘图时,经常会出现在一张图中绘制多条曲线的情况,这时用户可以使用legend命令为曲线填加图例以便区分它们。该函数能够为图形中所有的曲线进行自动标注,并以输入变量作为标注文本。其调用格式如下:
其中'string1','string2'等分别标注对应绘图过程中按绘制先后顺序所生成的曲线,'Location',location用于定义标注放置的位置。Location可以是一个1×4向量([left bottom width height])或任意一个字符串之一。对图例位置标注定义如表5-5所示。
表5-5 图例位置标注定义
标注的位置还可以通过定位代号来定义,代号的说明如下:
· 0:自动定位,使得标注图标与图形重叠最少;
· 1:默认值,置于图形的右上角;
· 2:置于图形的左上角;
· 3:置于图形的左下角;
· 4:置于图形的右下角;
· -1:置于图形的右外侧。
用户还可以通过鼠标来调整图例标注的位置。
【示例】
通过上述示例代码可以用鼠标来调整图例标注的位置,图例标注效果如图5-50所示。
图5-50 图例标注
5.4.2 坐标轴的控制
在MATLAB 7.0中可以通过设置各种参数来实现对坐标轴的控制,其中的高级控制涉及到图形句柄,这里只介绍初级的控制命令。
1.axis函数控制坐标轴特征
该命令用于控制坐标轴的刻度范围及显示形式,调用格式如下:
其中[xmin xmax ymin ymax zmin zmax]用于定义坐标轴的范围,控制字符串可以是表5-6中的任一表达式。
表5-6 axis命令的控制字符串
【示例】
使用axis命令设定坐标轴之前的图如图5-51所示。
图5-51 使用axis设定坐标轴之前的图
使用axis命令设定坐标轴之后的图如图5-51所示。
图5-52 使用axis设定坐标轴之后的图
2.zoom函数控制坐标轴缩放
该命令用于实现对二维图形的缩放,其调用格式如下:
其中控制字符串可以是表5-7中的任一字符串。
表5-7 zoom命令的控制字符串
3.grid函数控制坐标轴网格
该命令用于绘制坐标网格,其调用格式如下:
【示例】
使用grid函数添加网格线,如图5-53所示。
图5-53 添加网格线
4.box函数控制坐标轴封闭
该命令用于在图形四周都能显示坐标,其调用格式如下:
【示例】
对grid一节中的示例添加“>>box off”,命令,结果如图5-54所示,注意观察与上例图形的区别。
图5-54 box命令示例
5.4.3 图形数据取点
当用户为某一函数作好图形后,有时候会希望知道在某一自变量值下的函数值,这时使用取点命令ginput可方便地通过鼠标来读取二维平面图中任一点的坐标值。其调用格式如下:
【示例】
用户在通过鼠标取点前会出现“+”形,如图5-55所示。用ginput命令执行的结果如图5-56所示。
图5-55 取点确定前出现“+”形
图5-56 ginput命令执行结果
取点结束后,在MATLAB 7.0命令窗口显示以下结果:
5.4.4 子图和图形保持
在绘图过程中,用户会经常碰到下面两种情况。在已存的一张图中填加新的曲线;将几个图形在同一个图形窗口中表现出来,但又不在同一个坐标系中绘制。MATLAB 7.0为这两种需要分别提供hold函数和subplot函数,前面的示例已用到hold函数,下面对它们的使用方法进行介绍。
【hold命令】
该命令常用调用格式如下:
在前面的示例中已经使用到该命令,使用方法比较简单,用户只要实践几次就可掌握,在此不再举例说明。
【subplot命令】
该命令用于生成并控制多个坐标轴,绘制出的效果图如图5-57所示。把当前图形窗口分隔成几个矩形部分,不同的部分是按行方向以数字进行标号的。每一部分有一坐标轴,后面的图形输出在当前的部分中。常用调用格式如下:
【示例】
图5-57 subplot命令作图效果
【示例】
图5-58 subplot的p参数为向量
5.4.5 色彩控制
图形的一个重要因素就是图形的颜色,丰富的颜色变化能让图形更具表现力。在MATLAB 7.0中,色图colormap是完成这方面工作的主要命令。
MATLAB是采用颜色映像来处理图形颜色的,即RGB色系。计算机中的各种颜色都是通过三原色按不同比例调制出来的,三原色即红(Red)、绿(Green)、蓝(Blue)。每一种颜色的值表达为一个1×3的向量[RGB],其中R、G、B值的大小分别代表这3种颜色之间的相对亮度,因此它们的取值范围均必须在[0,1]区间内。每一种不同的颜色对应一个不同的向量。表5-8给出了典型的颜色配比方案。
表5-8 典型的配色方案
调好颜色后,就可以用它作为绘图用色。一般的线图函数(如plot,plot3等)不需要色图来控制其色彩显示,而对于面图函数(如mesh,surf等)则需要调用色图。色图设定命令为:
其中,输入变量[R, G, B]为一个三列矩阵,行数不限,该矩阵称为色图。表5-9给出了几种典型的常用色图的名称和其产生函数。
表5-9 常用色图的名称及其产生函数
【示例】
此语句是用于定义当前窗口的颜色映象为饱和色图,其颜色定义了128种。如果用户没有定义颜色的多少,那么色图的大小(颜色种数的数目)与当前色图的大小相同。
【示例】
使用autumn命令绘制的图如图5-59所示。
图5-59 使用autumn色图绘图
除了colormap命令外,用户还可以通过以下一些常用函数命令对色图进行控制。
【brighten函数命令】
该函数用于增亮或变暗色图。常见调用格式如下:
【colorbar函数命令】
该函数用于显示能指定颜色刻度的颜色标尺。常见调用格式如下:
【示例】
通过colorbar显示颜色标尺,如图5-60所示。
图5-60 颜色标尺
【rgbplot函数命令】
该函数用于画出色图。常见调用格式如下:
【示例】
用rgbplot命令绘制出的色图如图5-61所示。
图5-61 rgbplot命令画出色图
【caxis函数命令】
该函数用于颜色轴刻度,控制数值与色彩间的对应关系以及颜色的显示范围。常见调用格式如下:
【示例】
用caxis命令绘制出的图形如图5-62所示。
图5-62 caxis命令绘图效果
【shading函数命令】
该函数用于控制曲面图形的着色方式。常见调用格式如下:
【示例】
用shading命令控制图形着色法方式如图5-63所示。
图5-63 控制图形着色方式
【colordef函数命令】
该函数用于设置图形的背景颜色。常见调用格式如下:
【示例】
用colordef函数命令将图形背景色设为默认值。
图5-64 设置图形背景色为默认值
用colordef函数命令将图形背景色设为黑色。
图5-65 设置图形背景色为黑色
5.4.6 视角与光照
三维视图表现的是一个空间内的图形,因此从不同的位置和角度观察图形会有不同的效果。MATLAB提供对图形进行视觉及光源控制的功能。所谓视觉就是图形展现给用户的角度,而光照就是图形色彩强弱变化的方向。下面向读者介绍与视角和光照相关的MATLAB命令。
1.视角控制命令
MATLAB语言中用于视觉控制的命令函数主要有view、viewmtx和rotate3D,下面分别
介绍它们的调用方法。
【view函数命令】
该命令用于指定立体图形的观察点。观察者(观察点)的位置决定了坐标轴的方向。用户可以用方位角(azimuth)和仰角(elevation)一起,或者用空间中的一点来确定观察点的位置,如图5-66所示。其调用格式如下:
图5-66 仰角和方位角示意图
【示例】
用view函数命令设置视点,效果如图5-67所示。
图5-67 为图形设置视点
【viewmtx函数命令】
该命令用于视点转换矩阵。计算一个4*4阶的正交的或透视的转换矩阵,该矩阵将一四维的、齐次的向量转换到一个二维的视平面上。其调用格式如下:
表5-10 phi的取值
【示例】
用viewmtx函数绘制出的效果图如图5-68所示。
图5-68 viewmtx命令
【rotate3D函数命令】
该命令为三维视角变化函数,它的使用将触发图形窗口的rotate3D选项,用户可以方便地用鼠标来控制视角的变化,且视角的变化值也将实时地显示在图中。
【示例】
在图形窗口的图形区域内按住鼠标左键不放来调节视角,用户可以很方便地从不同的角度来观察所绘得的图形,效果如图5-69所示。
图5-69 旋转三维图形
2.三维透视命令
在MATLAB7.0中使用mesh等命令绘制网格曲面时,系统在默认情况下会隐藏重叠在后面的网格,利用透视命令hidden可以看到被遮的部分。其调用格式如下:
【示例】
用三维透视命令绘制完成的图形如图5-70所示。
图5-70 三维透视图形
3.光照控制命令
MATLAB语言提供了如表5-11所述的光照控制命令。本小节只介绍其中几个常用的函数命令,其他命令的用法请读者查阅帮助。
表5-11 MATLAB语言中的图形光照控制命令
【light函数命令】
该命令为当前图形建立光源。其主要的调用格式如下:
【示例】
用light命令为图形设置光源,如图5-71所示。
图5-71 为图形设置光源
【lighting函数命令】
该命令用于设置曲面光源模式,其调用格式如下:
【示例】
用lighting命令设置曲面光源模式,如图5-72所示。
图5-72 设置曲面光源模式
【material函数命令】
该命令用于设置图形表面对光照反映模式,其调用格式如下:
【surfl函数命令】
该命令用于绘制三维带光照模式的阴影图。surfl(…)效果与命令surf(…)基本上一样,但是它会受光源的影响。图形的色泽取决于曲面的漫反射、镜面反射与环境光照模式。其主要调用格式如下:
【示例】
用surfl命令绘制的图形如图5-73所示。
图5-73 surfl函数绘图
5.4.7 图形的打印和输出
用户在使用各种绘图命令作出精美的图形后,经常需要将图形打印或是以图片形式放在其他文档中保存或是在其他图片处理软件中作进一步的处理。MATLAB为用户提供了3种不同的方式输出当前的图形。首先是通过图形窗口的命令菜单或是工具栏中的打印选项来输出;其次,使用MATLAB语言提供的内置打印引擎或系统的打印服务来实现;最后可以以其他的图形格式存储图形,然后通过其他的图形处理软件对其进行处理和打印。
利用菜单或工具栏来实现打印非常简单,这也是用户最常用的一种方式,在这里不作详细介绍。下面简单介绍实现打印的函数print的基本调用格式。代码设置如下:
5.5 图形窗口
用户通过前面介绍的绘图命令得到的图形都是在相同的图形窗口中绘制的,它们都具有相同的窗口菜单和工具栏。这个窗口是MATLAB 7.0所有图形输出的专用窗口,在利用前面的每一个绘图命令绘图时,这个窗口是随之自动生成的,所以用户到此为止可能并不知道这个窗口是如何产生的,以及它有哪些作用。下面将向读者介绍如何在利用函数命令绘制图形之前生成图形窗口,以及利用窗口中的菜单和工具栏命令对图形和图形窗口的属性进行各种设置。
5.5.1 图形窗口的创建与控制
创建图形窗口的命令是figure,其调用方式如下:
用户可以通过下面两个命令来分别查阅和设置图形窗口的属性和参数。
【示例】
· 在MATLAB7.0命令窗口执行“>>figure(2)”命令,打开“Figure2”窗口,如图5-74所示。
图5-74 创建图形窗口
注意:图形窗口的标题为Figure2,如果使用“>>figure”命令则标题为Figure1。
· 执行“>>get(2)”,则在命令窗口中出现下面的代码。
· 执行“>>set(2)”,则在命令窗口中出现下面的代码。
5.5.2 图形窗口的菜单操作
下面详细介绍图形窗口的各项菜单命令。
1.【File】菜单
该菜单与Windows系统的菜单类似,下面介绍其各个菜单项的功能。
【New】选项用于新建一个M-文件(M-File)、图形窗口(Figure)、Simulink模型(Model)、MATLAB 7.0工作空间的变量(Variable)或用户界面(GUI)。其中创建GUI设置的对话框如图5-75所示。
图5-75 创建GUI的设置对话框
【Generate M-File】选项用于生成M-函数文件。
【示例】
· 在MATLAB 7.0命令窗口中执行“>>mesh(peaks)”命令,打开如图5-76所示的窗口。
图5-76 绘制图形
· 在生成的图形窗口中选择“Generate M-File”选项,生成如图5-77所示的文件,保存该文件。
图5-77 生成M-函数文件
· 在MATLAB命令窗口执行“>>createfigure(peaks)”命令可以得到与mesh(peaks)命令一样的图形(包括对图形的各种设置也是一样的),如图5-76所示。
【Import Data】选项用于导入数据。
【Save Workspace As】选项用于将图形窗口中的图形数据存储在二进制mat文件中,它们可以供其他的编程语言(如C语言等)调用。
【Preferences】选项用于定义图形窗口的各种设置,包括字体、颜色等,如图5-78所示。
【Export Setup】选项用于打开“图形输出”对话框,可以把图形以emf、ai、bmp、eps、jpg、pdf等格式保存,并设置有关图形窗口的显示等方面的参数,如图5-79所示。读者可以选择不同的设置以观察图形窗口有什么变化。
图5-78 “图形窗口设置”对话框
图5-79 “图形输出”对话框
【Page Setup】选项用于打开“页面设置”对话框,如图5-80所示。设置图形尺寸、纸张大小、线型及文本类型以及坐标轴和图形设置。
图5-80 “页面设置”对话框
【Print Setup】选项用于打开“打印设置”对话框。在这里可以设置图片的题图等。
【Print Preview】选项用于打开打印预览对话框,如图5-81所示。
【Print】选项用于打开打印对话框。
图5-81 “打印预览”对话框
2.【Edit】菜单
该菜单中各选项的主要功能如下。
【Copy Figure】选项用于复制图形。
【Copy Option】选项用于打开“复制设置”对话框,设置图形复制的格式、图形背景颜色和图形大小等。该选项打开的对话框界面与“File→Preferences”的界面相同,只是当前显示的面板不同。
【Figure Properties】选项用于打开图形窗口的属性设置对话框,如图5-82所示。
图5-82 “图形窗口的属性设置”对话框
【Axes Properties】选项用于打开“设置坐标轴属性”对话框。
【Current Object Properties】选项用于打开设置图形窗口中当前对象(如窗口中的坐标轴、图形等)属性的对话框。
【Colormap】选项用于打开“色图编辑”对话框,如图5-83所示。
图5-83 “色图编辑”对话框
【Clear Figure】、【Clear Command Window】、【Clear Command History】和【Clear Workspace】选项分别用于清除图形窗口中的图形、清除命令窗口、清除历史命令和清空工作空间。
3.【View】菜单
该菜单各选项主要用于打开各种工具栏和控制面板,选中该菜单的所有选项后得到如图5-84所示的图形窗口。
图5-84 打开各种工具栏的图形窗口
(1)图形窗口工具条主要用于对图形进行各种处理(如旋转三维图形、取得图形中某点的坐标值、插入图例标注和插入色图条等);
(2)照相工具条主要用于设置图形的视角和光照等,用户可以通过它们来实现从不同角度来观察所绘三维图形,并且为图形设置不同的光照情况;
(3)绘图编辑工具条主要用于向图形中添加文本标注和各种标注图形等;
(4)绘图浏览器用于浏览当前图形窗口中的所有图形对象。
读者只要对其中各种工具栏的各个工具图标加以试验,就不难发现前面介绍的许多处理图形的命令其实可以直接通过这些直观的图标工具来实现,读者只要熟练掌握这些工具条的应用,就可以完成大部分图形处理工作,而不需要去记忆大量的命令函数。
4.【Insert】菜单
该菜单主要用于向当前图形窗口中插入各种标注图形(如插入单箭头、文字等),即实现绘图编辑工具条中的各种功能。
5.【Tools】菜单
该菜单中大部分选项实现的功能使用前面介绍的几个工具条的相关命令图标同样可以实现,这里通过一个示例来重点介绍【Basic Fitting】和【Data Statistics】两菜单项的功能。
【示例】
· 在MATLAB 7.0命令窗口中执行“>>figure”命令,然后选中【View】菜单中所有的选项,如图5-85所示。
图5-85 “Figure”窗口
· 在MATLAB命令窗口中执行下面的命令,MATLAB的工作空间中出现两个变量x,y。
· 在图5-85中的【Figure Palette】面板中选择“2D Axes”,然后选择【Plot Browser】中的“Axes(no title)”使该浏览器中的“Add Data”按钮变成可用,并单击该按钮。按如图5-86所示设置x,y轴的数据。
图5-86 为图形窗口添加坐标轴和数据
· 设置好绘图方式和x,y轴的数据变量后,单击图5-86中的“OK”按钮,就会绘制出数据,如图5-87所示。
图5-87 绘制图形
· 选中【Tools】菜单中的“Data Statistics”选项,出现如图5-88所示的数据统计对话框,其中显示了x,y变量数据的最小值、最大值、平均值等。选中x,y列中的“mean”选择框,观察绘图区的变化。
图5-88 图形数据的统计
· 取消【View】菜单中的“Figure Palette”、“Plot Browser”和“Property Editor”选项,选中【Tools】菜单中的“Basic Fitting”选项,然后选择右箭头按钮,并按如图5-89所示进行设置。图形窗口就会变成如图5-90所示的拟合曲线和拟合误差曲线。
图5-89 设置图形数据拟合的参数
图5-90 曲线拟合的结果
6.【Desktop】菜单
该菜单用于将窗口合并到MATLAB 7.0主界面的窗口中。
7.【Window】菜单和【Help】菜单
这两个菜单与Windows系统中各种应用程序的用户界面的相关菜单很类似,在此不作详细介绍。
5.5.3 图形窗口的工具栏
在表5-12中对如图5-85所示的figure窗口中各工具栏的功能进行了较为详细的介绍。
表5-12 图形窗口工具栏
【示例】
· 在命令窗口执行下面的命令:
· 选中图形窗口中View菜单的前三项,并为图形填加一双箭头,如图5-91所示。
图5-91 双箭头示例
· 选中双箭头,再单击按钮在双箭头的两个箭头处分别添加pin,然后单击
按钮移动图形,可以发现两条曲线的相对位置不变,如图5-92所示。
图5-92 为图形添加pin