注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

点点滴滴

感悟人生,享受精彩。

 
 
 

日志

 
 

第7章 绘图与图形处理  

2009-03-30 15:45:27|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

第7章  绘图与图形处理

人们很难从一大堆原始的数据中发现它们的含义,而数据图形恰能使视觉感官直接感受到数据的许多内在本质,发现数据的内在联系。MATLAB可以表达出数据的二维,三维,甚至四维的图形。通过图形的线型,立面,色彩,光线,视角等属性的控制,可把数据的内在特征表现得淋漓尽致。下面我们分别介绍图形的命令。
7.1  二维图形
7.1.1  基本平面图形命令
命令1  plot
功能  线性二维图。在线条多于一条时,若用户没有指定使用颜色,则plot循环使用由当前坐标轴颜色顺序属性(current axes ColorOrder property)定义的颜色,以区别不同的线条。在用完上述属性值后,plot又循环使用由坐标轴线型顺序属性(axes LineStyleOrder property)定义的线型,以区别不同的线条。
用法  plot(X,Y) 当X,Y均为实数向量,且为同维向量(可以不是同型向量),X=[x(i)],Y=[y(i)],则plot(X,Y)先描出点(x(i),y(i)),然后用直线依次相连;若X,Y为复数向量,则不考虑虚数部分。若X,Y均为同维同型实数矩阵,X = [X(i)],Y = [Y(i)],其中X(i),Y(i)为列向量,则plot(X,Y)依次画出plot(X(i),Y(i)),矩阵有几列就有几条线;若X,Y中一个为向量,另一个为矩阵,且向量的维数等于矩阵的行数或者列数,则矩阵按向量的方向分解成几个向量,再与向量配对分别画出,矩阵可分解成几个向量就有几条线;在上述的几种使用形式中,若有复数出现,则复数的虚数部分将不被考虑。
plot(Y) 若Y为实数向量,Y的维数为m,则plot(Y)等价于plot(X,Y),其中x=1:m;若y为实数矩阵,则把y按列的方向分解成几个列向量,而y 的行数为n,则plot(Y)等价于plot(X,Y)其中x=[1;2;…;n];在上述的几种使用形式中,若有复数出现,则复数的虚数部分将不被考虑。
plot(X1,Y1,X2,Y2,…),其中Xi与Yi成对出现,plot(X1,Y1,X2,Y2,…)将分别按顺序取两数据Xi与Yi进行画图。若其中仅仅有Xi或Yi是矩阵,其余的为向量,向量维数与矩阵的维数匹配,则按匹配的方向来分解矩阵,再分别将配对的向量画出。
plot(X1,Y1,LineSpec1,X2,Y2,LineSpec2…) 将按顺序分别画出由三参数定义Xi,Yi,LineSpeci的线条。其中参数LineSpeci指明了线条的类型,标记符号,和画线用的颜色。在plot 命令中我们可以混合使用三参数和二参数的形式:
plot(X1,Y1,LineSpec1,X2,Y2,X3,Y3,LineSpec3)
plot(…,'PropertyName',PropertyValue,…) 对所有的用plot生成的line图形对象中指定的属性进行恰当的设置。
h = plot(…) 返回line图形对象句柄的一列向量,一线条对应一句柄值。
说明  参数LineSpec
功能  定义线的属性。Maltab允许用户对线条定义如下的特性:
1.线型
表7-1
定义符 - -- : -. 
线型 实线(缺省值) 划线 点线 点划线 
2.线条宽度
指定线条的宽度,取值为整数(单位为像素点)
3.颜色
表7-2
定义符 R(red) G(green) b(blue) c(cyan) 
颜色 红色 绿色 兰色 青色 
定义符 M(magenta) y(yellow) k(black) w(white) 
颜色 品红 黄色 黑色 白色 
4.标记类型
表7-3
定义符 + o(字母) * . x 
标记类型 加号 小圆圈 星号 实点 交叉号 
定义符 d ^ v > < 
标记类型 棱形 向上三角形 向下三角形 向右三角形 向左三角形 
定义符 s h P   
标记类型 正方形 正六角星 正五角星   
5.标记大小
指定标记符号的大小尺寸,取值为整数(单位为像素)
6.标记面填充颜色
指定用于填充标记符面的颜色。取值在上表。
7.标记周边颜色
指定标记符颜色或者是标记符(小圆圈、正方形、棱形、正五角星、正六角星和四个方向的三角形)周边线条的颜色。取值在上表。
在所有的能产生线条的命令中,参数LineSepc可以定义线条的下面三个属性:线型、标记符号、颜色进行设置。对线条的上述属性的定义可用字符串来定义,如:plot(x,y,'-.or')
结合x和y,画出点划线(-.),在数据点(x,y)处画出小圆圈(o),线和标记都用红色画出。其中定义符(即字符串)中的字母、符号可任意组合。若没有定义符,则画图命令plot自动用缺省值进行画图。若仅仅指定了标记符,而非线型,则plot只在数据点画出标记符。如:plot(x,y,’d’)
例7-1
   >>t = 0:pi/20:2*pi;
   >>plot(t,t.*cos(t),'-.r*')
   >>hold on
   >>plot(exp(t/100).*sin(t-pi/2),'--mo')
   >>plot(sin(t-pi),':bs')
   >>hold off
图形结果为图7-1。
例7-2
   >>plot(t,sin(2*t),'-mo', 'LineWidth',2,'MarkerEdgeColor','k',…
         'MarkerFaceColor',[.49 1 .63],'MarkerSize',12)
图形结果为图7-2。
图7-1  二维曲线图             图7-2  二维图形的绘制
命令2  fplot
功能  在指定的范围limits内画出一元函数y=f(x)的图形。其中向量x的分量分布在指定的范围内,y是与x同型的向量,对应的分量有函数关系:y(i)=f(x(i))。若对应于x的值,y返回多个值,则y是一个矩阵,其中每列对应一个f(x)。例如,f(x)返回向量[f1(x),f2(x),f3(x)],输入参量x=[x1;x2;x3],则函数f(x)返回矩阵
                 f1(x1)   f2(x1)  f3(x1)
                 f1(x2)   f2(x2)  f3(x2)
                 f1(x3)   f2(x3)  f3(x3)
注意一点的是,函数function必须是一个m-文件函数或者是一个包含变量x,且能用函数eval计算的字符串。例如:’sin(x)*exp(2*x)’,’[sin(x),cos(x)]’,’hump(x)’。
用法  fplot('function',limits) 在指定的范围limits内画出函数名为function的一元函数图形。其中limits是一个指定x-轴范围的向量[xmin xmax]或者是x轴和y轴的范围的向量[xmin xmax ymin ymax]。
      fplot('function',limits,LineSpec) 用指定的线型LineSpec画出函数function。
      fplot('function',limits,tol) 用相对误差值为tol画出函数function。相对误差的缺省值为2e-3。
      fplot('function',limits,tol,LineSpec) 用指定的相对误差值tol和指定的线型LineSpec画出函数function的图形。
      fplot('function',limits,n) 当n>=1,则至少画出n+1个点(即至少把范围limits分成n个小区间),最大步长不超过(xmax-xmin)/n。
      fplot(‘function’,lims,…) 允许可选参数tol,n和LineSpec以任意组合方式输入。
      [X,Y] = fplot('function',limits,…) 返回横坐标与纵坐标的值给变量X和Y,此时fplot不画出图形。若想画出,可用命令plot(X,Y)。
      […] = plot('function',limits,tol,n,LineSpec,P1,P2,…) 允许用户直接给函数function输入参数P1,P2等,其中函数functiond的定义形式为
                y = function(x,P1,P2,…)
      若想用缺省的tol,n或LineSpec值,只需将空矩阵([ ])传递给函数即可。
注意:fplot采用自适应步长控制来画出函数function的示意图,在函数的变化激烈的区间,采用小的步长,否则采用大的步长。总之,使计算量与时间最小,图形尽可能精确。
例7-3
>>fplot('tanh',[-2 2])
图形结果为图7-3。
>>subplot(2,2,1);fplot('humps',[0 1])
>>subplot(2,2,2);fplot('abs(exp(-j*x*(0:9))*ones(10,1))',[0 2*pi])
>>subplot(2,1,2);fplot('[tan(x),sin(x),cos(x)]',2*pi*[-1 1 -1 1])
图7-3  函数画图                     图7-4
命令3  loglog
功能  双对数图形。
用法  loglog(Y) 若y为实数向量或矩阵,则结合y列向量的下标与y的列向量画出。若y为复数向量或矩阵,则loglog(Y)等价于loglog(real(Y),imag(Y)),在loglog的其他使用形式中将忽略Y的虚数部分。
      loglog(X1,Y1,X2,Y2…) 结合Xn与Yn画出图形。若只有Xn或Yn为矩阵,另一个为向量,行向量维数等于矩阵的列数,列向量的维数等于矩阵的行数,则loglog把矩阵按向量的方向分解成向量,再与向量结合分别画出图形。
      loglog(X1,Y1,LineSpec1,X2,Y2,LineSpeec2…) 按顺序取三个参数Xn,Yn, LineSpecn画出线条,其中LineSpecn指定线条的线型,标记符号和颜色。用户可以混合使用二参数和三参数形式,如:
                 loglog(X1,Y1,X2,Y2,LineSpec2,X3,Y3)
      loglog(…,'PropertyName',PropertyValue,…) 对所有由loglog命令生成的图形对象句柄的属性进行设置。
      h = loglog(…) 返回line图形句柄向量,每条线对应一个句柄。
例7-4
>>x = logspace(-1,2);
>>loglog(x,10*exp(x),'-s')
>>grid on
图7-5
命令4  semilogx
功能  x轴对数图形。若没有指定使用的颜色,当所画线条较多时,semilogx将自动使用由当前轴的ColorOrder和LineStyleOrder属性指定的颜色顺序和线型顺序来画线。
用法  semilogx(Y)    %对x轴的刻度求常用对数(以10为底),而y轴为线性刻度。若y为实数向量或矩阵,则结合y列向量的下标与y的列向量画出线条;若y为复数向量或矩阵,则semilogx(Y)等价于semilogx(real(Y),imag(Y))。在semilogx的其他使用形式中,Y的虚数部分将被忽略。
      semilogx(X1,Y1,X2,Y2…)   %结合Xn和Yn画出线条,若其中只有xn或yn为矩阵,另外一个为向量,行向量的维数等于矩阵的列数,列向量的维数等于矩阵的行数,则按向量的方向分解矩阵,再与向量结合,分别画出线条。
      semilogx(X1,Y1,LineSpec1X2,Y2,LineSpec2,…)   %按顺序取三参数Xn,Yn,LineSpecn画线,参数LineSpecn指定使用的线型,标记符号和颜色。用户可以混合使用二参数和三参数形式,如:
                 semilogx(X1,Y1,X2,Y2,LineSpec2,X3,Y3)
      semilogx(…,'PropertyName',PropertyValue,…)   %对所有由semilogx命令生成的图形对象句柄的属性进行设置
      h = semilogx(…)   %返回line图形句柄向量,每条线对应一个句柄。
例7-5
>>x = 0:.1:10;
>>semilogx(x,cos(10.^x))
图形结果为图7-6。
命令5  semilogy
用法:参见semilogx命令。
命令6  fill
功能  用颜色填充二维多边形。
用法  fill(X,Y,C) 用x和y中的数据生成多边形,用c指定的颜色填充它。其中c为色图向量或矩阵。若c是行向量,则要求c的维数等于x和y 的列数,若c为列向量,则要求c的维数等于x和y的行数。
      fill(X,Y,ColorSpec) 用ColorSpec指定的颜色填充由x和y定义的多边形
      fill(X1,Y1,C1,X2,Y2,C2,…) 指定多个要填充的二维区域
      fill(…,'PropertyName',PropertyValue) 允许用户对一个patch图形对象的某个属性设定属性值。
      h = fill(…) 返回patch图形对象句柄的向量,每一个patch对象对应一个句柄。
注意:
1. 若x或y是一矩阵,另一个是向量,向量应是维数与矩阵的行数相等的列向量或是维数等于矩阵列数的行向量时,函数fill将向量复制成与矩阵同型的矩阵。函数fill将矩阵x与y中列向量中的数据生成多边形的顶点。
2. 颜色阴影类型决定于用户在参数中列出的颜色,若用户用ColorSpec指定颜色,命令fill生成平坦阴影模式(flat-shaded)多边形,同时设置补片对象(patch)的FaceColor属性为相应的RGB颜色矩阵。
3. 若用户用参量c指定所用颜色,命令fill按坐标轴属性Clim的比例缩小c中的元素,之后,c成为引用当前色图的下标矩阵。
4. 若c为行向量,命令fill生成平面阴影的多边形,c的每一元素决定由矩阵x,y的每一列定义的多边形内的颜色,每一补片对象的FaceColor属性被设置为'flat',x,y的每一行元素变成第n块补片对象的Cdata属性值,其中n为矩阵x或y中的相应的列。
5. 若c为一列向量或一矩阵,命令fill运用一线性插值法计算每一节点的颜色,以便用插值颜色填充多边形的内部。它设置补片对象的FaceColor属性为‘interp’,且在一列中的元素变成每一补片的Cdata属性值。若c为一列向量,命令fill用该向量复制成需要大小的尺寸。
例7-6
>>t = (1/16:1/8:1)'*2*pi;
>>x = exp(t).*sin(t);
>>y = t.*cos(t);
>>fill(x,y,'k')
>>grid on
图形结果为图7-7。
命令7  zoom
功能  对二维图形进行放大或缩小。放大或缩小会改变坐标轴范围。
用法  zoom on 打开交互式的放大功能。当一个图形处于交互式的放大状态时,有两种方法来放大图形:
对于一键鼠标或二键,三键鼠标,单击坐标轴内的任意一点,可使图形放大一倍,这一操作可进行多次,直到matlab的最大显示为止;对于二键或三键的鼠标,在坐标轴内单击右键,可使图形缩小一倍,这一操作可进行多次,直到还原图形为止。对于一键鼠标,要想缩小图形,需要按住键盘上的Shift键,再单击鼠标键。
用鼠标拖出要放大的部分,系统将放大选定的区域。
      zoom off 关闭交互式放大功能。
      zoom out 将系统转回非放大状态,并将图形恢复原状。
      zoom reset 系统将记住当前图形的放大状态,作为放大状态的设置值。以后使用zoom out或者是双击鼠标时,交互式放大状态打开,且图形并不是返回到原状,而是返回reset时的放大状态。
      zoom 用于切换放大的状态:on和off。
      zoom xon 只对x轴进行放大。
      zoom yon 只对y轴进行放大。
      zoom(factor) 用放大系数factor进行放大或缩小,而不影响交互式放大的状态。若factor>1,系统将图形放大factor倍,若0<factor≤1,系统将图形放大1/factor倍。
      zoom(fig, option) 指定对窗口fig中(不一定为当前窗口)的二维图形进行放大,其中参数option为:on、off、xon、yon、reset、factor等。
命令8  meshgrid
功能  生成二元函数z = f(x,y)中x-y平面上的矩形定义域中数据点矩阵X和Y,或者是三元函数u =  f(x,y,z)中立方体定义域中的数据点矩阵X,Y和Z。
用法  a:[X,Y] = meshgrid(x,y)
      b:[X,Y] = meshgrid(x)
      c:[X,Y,Z] = meshgrid(x,y,z)
说明  对于形式a,输入向量x为x-y平面上矩形定义域的矩形分割线在x轴的值,向量y为x-y平面上矩形定义域的矩形分割线在y轴的值。输出向量X为x-y平面上矩形定义域的矩形分割点的横坐标值矩阵,输出向量Y为x-y平面上矩形定义域的矩形分割点的纵坐标值矩阵。
对于形式b,等价于形式a:[X,Y] = meshgrid(x) = meshgrid(x,x)。
对于形式c,输入向量x为立方体定义域的立方体分割平面在x轴上的值,输入向量y为立方体定义域的立方体分割平面在y轴上的值,输入向量z为立方体定义域的立方体分割平面在z轴上的值。输出向量X为立方体定义域中分割点的x轴坐标值,Y为立方体定义域中分割点的y轴坐标值,Z为立方体定义域中分割点的z轴坐标值。
例7-7
    >>x = [0.7 1.1 ]; y = [-2 3 1]; z = [2 5 3];  %分量不一定从小到大
    >>[X_2d,Y_2d] = meshgrid(x,y)
    >>[X_3d,Y_3d,Z_3d] = meshgrid(x,y,z)
计算结果为:
X_2d =
    0.7000    1.1000
    0.7000    1.1000
    0.7000    1.1000
Y_2d =
    -2    -2
     3     3
     1     1
X_3d(:,:,1) =
    0.7000    1.1000
    0.7000    1.1000
    0.7000    1.1000
X_3d(:,:,2) =
    0.7000    1.1000
    0.7000    1.1000
    0.7000    1.1000
X_3d(:,:,3) =
    0.7000    1.1000
    0.7000    1.1000
    0.7000    1.1000
Y_3d(:,:,1) =
    -2    -2
     3     3
     1     1
Y_3d(:,:,2) =
    -2    -2
     3     3
     1     1
Y_3d(:,:,3) =
    -2    -2
     3     3
     1     1
Z_3d(:,:,1) =
     2     2
     2     2
     2     2
Z_3d(:,:,2) =
     5     5
     5     5
     5     5
Z_3d(:,:,3) =
     3     3
     3     3
     3     3
7.1.2  特殊平面图形命令
命令1  polar
功能  画极坐标图。该命令接受极坐标形式的函数rho=f(θ),在笛卡儿坐标系平面上画出该函数,且在平面上画出极坐标形式的格栅。
用法  polar(theta,rho) 用极角theta和极径rho画出极坐标图形。极角theta为从x轴到半径的单位为弧度的向量,极径rho为各数据点到极点的半径向量。
      polar(theta,rho,LineSpec) 参量LineSpec指定极坐标图中线条的线型、标记符号和颜色等。
例7-8
>>t = 0:.01:2*pi;
>>polar(t,sin(3*t).*cos(2*t),'--r')
图形结果为图7-8。
命令2  bar
功能  二维垂直条形图。用垂直条形显示向量或矩阵中的值。
用法  bar(Y) 若y为向量,则分别显示每个分量的高度,横坐标为1到length(y);若y为矩阵,则bar把y分解成行向量,再分别画出,横坐标为1到size(y,1),即矩阵的行数。
      bar(x,Y) 在指定的横坐标x上画出y,其中x为严格单增的向量。若y为矩阵,则bar把矩阵分解成几个行向量,在指定的横坐标处分别画出。
      bar(…,width) 设置条形的相对宽度和控制在一组内条形的间距。缺省值为0.8,所以,如果用户没有指定x,则同一组内的条形有很小的间距,若设置width为1,则同一组内的条形相互接触。
      bar(…,'style') 指定条形的排列类型。类型有“group”和“stack”,其中“group”为缺省的显示模式。
      “group”:若y为n*m阶的矩阵,则bar显示n组,每组有m个垂直条形的条形图。
      “stack”:对矩阵y的每一个行向量显示在一个条形中,条形的高度为该行向量中的分量和。其中同一条形中的每个分量用不同的颜色显示出来,从而可以显示每个分量在向量中的分布。
      bar(…,LineSpec) 用指定的颜色LineSpec显示所有的条形。
      [xb,yb] = bar(…) 返回用户可用命令plot或命令patch画出条形图的参量xb,yb。这对用户控制一个图形的显示是有用的,例如要在一个plot语句中加入装饰性的条形图等。
      h = bar(…) 返回一个patch图形对象句柄的向量。每一条形对应一个句柄。
例7-9
x = -2.9:0.2:2.9;
bar(x,exp(x.*sin(x)))
colormap gray
图形结果为图7-9。
例7-10
subplot(2,2,4)
bar(Y,1.5)
title 'Width = 1.5'
图形结果为图7-10。
命令3  barh
功能  二维水平条形图。用水平条形显示向量或矩阵中的值。
用法  barh(Y) 若y为向量,则分别显示每个分量的高度,纵坐标为1到length(y);若y为矩阵,则bar把y分解成行向量,再分别画出,纵坐标为1到size(y,1),即矩阵的行数。
      barh(x,Y) 在指定的纵坐标x上以水平方向画出y,其中x为严格单增的向量。若y为矩阵,则barh把矩阵分解成几个行向量,在指定的纵坐标处分别画出。
      barh(…,width) 设置条形的相对宽度和控制在一组内条形的间距。缺省值为0.8,所以,如果用户没有指定x,则同一组内的条形有很小的间距,若设置width为1,则同一组内的条形相互接触。
      barh(…,'style') 指定条形的排列类型。类型有“group”和“stack”,其中“group”为缺省的显示模式。
             “group”:若y为n*m阶的矩阵,则bar显示n组,每组有m个水平条形的条形图。
              “stack”:对矩阵y的每一个行向量显示在一个条形中,条形的高度为该行向量中的分量和。其中同一条形中的每个分量用不同的颜色显示出来,从而可以显示每个分量在向量中的分布。
      barh(…,LineSpec) 用指定的颜色LineSpec显示所有的条形。
      [xb,yb] = barh(…) 返回用户可用命令plot或命令patch画出条形图的参量xb,yb。这给用户控制一个图形的显示是有用的,例如要在一个plot语句中加入装饰性的条形图等。
      h = barh(…) 返回一个patch图形对象句柄的向量。每一条形对应一个句柄。
例7-11
>>X = 1:.5:5;
>>Y = exp(X).*sin(X);
>>barh(Y,'stack')
图形结果为图7-11。
命令4  compass
功能  从原点画箭头图。箭头图为一显示起点为笛卡儿坐标系中的原点的二维或三维方向或向量的图形,同时在坐标系中显示圆形的分隔线。
用法  compass(X,Y) 参量x与y为同型的n维向量,则命令显示n个箭头,箭头的起点为原点,箭头的位置为[X(i),Y(i)]。
      compass(Z) 参量z为n维复数向量,则命令显示n个箭头,箭头起点为原点,箭头的位置为[real(Z),imag(Z)].
      compass(…,LineSpec) 用参量LineSpec指定箭头图的线型、标记符号、颜色等属性。
      h = compass(…) 返回line对象的句柄给h。
例7-12
  Z = magic(20).*randn(20);
  compass(Z)
图形结果为图7-12。
命令5  comet
功能  二维彗星图。彗星图为彗星头(一个小圆圈)沿着数据点前进的动画,彗星体为跟在彗星头后面的痕迹,轨道为沿着整个函数的实线。我们要指出的是,由命令comet生成的轨迹是使用擦除模式(EraseMode)属性的值为none,该属性使用户不能打印该图形(只能得到彗星头),且当用户改变窗口的大小时,动画将消失。
用法  comet(y) 彗星图动画显示向量y确定的路线。
      comet(x,y) 彗星图动画显示向量x与y确定的路线。
      comet(x,y,p) 指定彗星体的长度p*length(y),缺省的p值为0.1。
例7-13
>>t = 0:.01:2*pi;
>>x = exp(sin(2*t)).*(cos(t).^2/3);
>>y = t.*(sin(t).^2);
>>comet(x,y);
图形结果为图7-13。
附:擦除模式(EraseMode)属性及属性值:{normal}|none|xor|background
    该属性控制系统用于显示与擦除线条对象的技术。不同的擦除模式对于生成动画系列,即控制个别对象的重新显示方式,对于改进外在显示和获得理想的效果是很必要的。
表7-4
属性值 含义 
Normal (缺省值) 重新显示受影响的区域,在必要的时候,进行三维分析计算,以保证所有的对象的显示都是正确的。该模式下的图形显示是最精确的,不过也是最缓慢的,以下其他三种模式显示速度较快,不过没有执行一个完全的重显过程,因而,图形显示也不是很精确的。 
none 当线条移动或改动时,该模式没有擦除线条,而是仍然显示于屏幕上。该模式下不能打印图形,因为系统没有存储前一图形的任何信息。 
xor 使用异或运算(xor)计算线条颜色与当前位置下的颜色,用所得结果显示与擦除线条。该模式对于线条下面对象的颜色没有任何破坏,只是影响到线条的当前显示颜色而已。 
Background 用当前坐标轴颜色重新显示线条的方式来擦除线条,若当前坐标轴颜色设置为none,则用图形的背景色来代替坐标轴颜色。该模式对于处于擦除线条后面的对象来说是有损害的,不过当前线条的颜色总是最合适的。 
命令6  errorbar
功能  沿着一曲线画误差棒形图。误差棒为数据的置信水平或者为沿着曲线的偏差。在下列参数中,若为矩阵,则按列画出误差棒。
用法  errorbar(Y,E) 画出向量y,同时显示在向量y的每一元素之上的误差棒。误差棒为E(i)在曲线y上面与下面的距离,所以误差棒的长度为2*E(i)。
      errorbar(X,Y,E) X,Y,E必须为同型参量。若同为向量,则画出带长度为2*E(i)、对称误差棒于曲线点(X(i),Y(i))之处;若同为矩阵,则画出带长度为E(i,j)、对称误差棒于曲面点(X(i,j),Y(i,j))之处,
      errorbar(X,Y,L,U) X,Y,L,U必须为同型参量。若同为向量,则在点(X(i),Y(i))处画出向下长为L(i),向上长为U(i)的误差棒;若同为矩阵,则在点(X(i,j),Y(i.j))处画出向下长为L(i,j),向上长为U(i,j)的误差棒。
      errorbar(…,LineSpec) 用LineSpec指定的线型、标记符、颜色等画出误差棒。
      h = errorbar(…) 返回线图形对象的句柄向量给h。
例7-14
>>X = 0:pi/10:pi;
>>Y = exp(X).*sin(X);
>>E = std(Y)*ones(size(X));
>>errorbar(X,Y,E)
图形结果为图7-14。
命令7  feather
功能  画出速度向量图。一羽毛图在横坐标上等距地显示向量。用户要表示各个向量的、相对于原点的向量分量。
用法  feather(U,V) 显示由参量向量u与v确定的向量,其中u包含作为相对坐标系中的x成分,v包含作为相对坐标系中的y成分。
      feather(Z) 显示复数参量向量z确定的向量,等价于feather(real(Z),imag(Z))。
 
      feather(…,LineSpec) 用参量LineSpec指定的线型、标记符号、颜色等属性画出羽毛图。
例7-15
>>th = (-90:10:90)*pi/180;
>>r = 4*ones(size(th));
>>[u,v] = pol2cart(th,r);
>>feather(u,v);
图形结果为图7-15。
命令8  hist
功能  二维条形直方图,可以显示出数据的分配情形。所有向量y中的元素或者是矩阵y中的列向量中的元素是根据它们的数值范围来分组的,每一组作为一个条形进行显示。条形直方图中的x轴反映了数据y中元素数值的范围,直方图的y轴显示出参量y中的元素落入该组的数目。所以y轴的范围从0到任一条形中包含元素最多的数字。直方图为一patch图形对象,若想改变图形的颜色,可以对patch对象的属性进行设置。缺省时,图形颜色是由当前色图进行控制,当前色图的第一个颜色为直方图的颜色。
用法  n = hist(Y) 把向量y中的元素放入等距的10个条形中,且返回每一个条形中的元素个数。若y为矩阵,则该命令按列对y进行处理。
      n = hist(Y,x) 参量x为向量,把y中元素放到m(m=length(x))个由x中元素指定的位置为中心的条形中。
      n = hist(Y,nbins) 参量nbins为标量,用于指定条形的数目。
      [n,xout] = hist(…) 返回向量n与包含频率计数与条形的位置向量xout,用户可以用命令bar(xout,n)画出条形直方图。
例7-16
>>x = -5:0.1:5;
>>y = randn(1000,1);
>>hist(y,x)
图形结果为图7-16。
命令9  histc
功能  直方图记数
用法  n = histc(x,edges) 统计向量x中、落入向量edges(元素必须为单调的非减的)各个元素之间的元素个数。输出参量n为一与向量edges同维的向量。其中若有edges(k)>=x(i)>=edges(k+1),则n(k)增加1。X中超出向量edges规定的范围的元素将不被统计。参量edges中可使用-inf与inf,用于包括向量x中非NaN的元素。若x为一矩阵,则对x的每一列进行上述操作。
      n = histc(x,edges,dim) 对多维矩阵的第dim维进行统计。
      [n,bin] = histc(…) n结果同上,同时返回矩阵下标bin。若x为向量,n(k) = sum(bin == k)。对于超出范围的数值,bin为零值。
命令10  rose
功能  画角度直方图。该直方图是一个显示所给数据的变化范围内数据的分布情形的极坐标图,所给数据分成不同的组。每一组作为一小扇形进行显示。
用法  rose(theta)  画一角度直方图,显示参数theta的数据在20个区间或更少的区间内的分布。向量theta中的角度单位为弧度,用于确定每一区间与原点的角度。每一区间的长度反映出输入参量的元素落入一区间的个数。
      rose(theta,x) 用参量x指定每一区间内的元素与区间的位置,length(x)等于每一区间内元素的个数与每一区间位置角度的中间角度。例如,若x为一5维向量,rose命令分配参量theta中的元素为5部分,每一部分的角度中线由x指定。
      rose(theta,nbins) 于区间 [0,2*pi] 内画出nbins个等距的小扇形。缺省值为20。
 
      [tout,rout] = rose(…) 返回向量tout与rout,可以用polar(tout,rout)画出图形。该命令没有画任何的图形。
例7-17
   >>theta = 3*pi*randn(1,30);
   >>rose(theta)
图形结果为图7-17。
命令11  stairs
功能  画二维阶梯图,这种图对与时间有关的数字样本系统的作图很有用处。
用法  stairs(Y) 用参量y的元素画一阶梯图。若y为向量,则横坐标x的范围从1到m=length(y),若y为矩阵,则对y的每一行画一阶梯图,其中x的范围从1到y的列数m。
     stairs(X,Y) 结合x与y画阶梯图。其中要求x与y为同型的向量或矩阵。此外,x可以为行向量或为列向量,且y为有m=length(x)行的矩阵。
     stairs(…,LineSpec) 用参数LineSpec指定的线型、标记符号和颜色画阶梯图。
     [xb,yb] = stairs(Y) 该命令没有画图,而是返回可以用命令plot画出参量y的阶梯图的向量xb与yb。
     [xb,yb] = stairs(X,Y) 该命令没有画图,而是返回可以用命令plot画出参量x,y的阶梯图的向量xb与yb。
例7-18
>>x = 0:.25:10;
>>stairs(x,exp(sin(x.^2)))
图形结果为图7-18。
命令12  stem
功能  画二维离散数据的柄形图。该图用线条显示数据点与x轴的距离,一小圆圈(缺省标记)或用指定的其他标记符号与线条相连,在y轴上标记数据点的值。
用法  stem(Y) 按y元素的顺序画出柄形图,在x轴上,柄与柄之间的距离相等;若y为矩阵,则把y分成几个行向量,在同一横坐标的位置上画出一个行向量的柄图。
      stem(X,Y) 在横坐标x上画出列向量y的柄形图 。其中x与y为同型的向量或矩阵,此外,x可以为行向量或列向量,而y为有m=length(x)行的矩阵。
      stem(…,'fill') 指定是否对柄形图末端的小圆圈填充颜色。
      stem(…,LineSpec) 用参数LineSpec指定线型,标记符号和柄图末端的小圆圈的颜色画柄图。
      h = stem(…) 返回柄形图的line图形对象句柄向量。
例7-19
>>x = linspace(0,2,10);
>>stem(exp(-x.^2),'fill','-.')
图形结果为图7-19。
命令13  stem3
功能  画三维离散数据的柄形图。该图用一线段显示数据离开xy平面的高度,在线段的末端用一小圆圈(缺省记号)或其他的标记符号表示数据的高度。
格式  stem3(Z) 用柄形图显示z中数据与xy平面的高度。若z为一行向量,则x与y将自动生成,stem3将在与x轴平行的方向上等距的位置上画出z的元素;若y为列向量,stem3将在与y轴平行的方向上等距的位置上画出z的元素。
      stem3(X,Y,Z) 在参数x与y指定的位置上画出z的元素,其中x,y,z必须为同型的向量或矩阵。
      stem3(…,'fill') 指定是否要填充柄形图末端小圆圈。
      stem3(…,LineSpec) 指定线型,标记符号和末端小圆圈的颜色。
      h = stem3(…) 返回柄形图的line图形对象句柄。
例7-20
[X,Y,Z] = peaks(20);
stem3(X,Y,Z,’r*')
图形结果为图7-20。
命令14  pie
功能  饼形图
格式  pie(X)  用x中的数据画一饼形图,x中的每一元素代表饼形图中的一部分。X中元素X(i)所代表的扇形大小通过X(i)/sum(X)的大小来决定。若有sum(X)=1,则x中元素就直接指定了所在部分的大小;若sum(X)<1,则画出一不完整的饼形图。
      pie(X,explode) 从饼形图中分离出一部分,explode为元素为零或非零的、与x相对应的向量或矩阵。与explode的非零值对应的部分将从饼形图中心分离出来。explode必须与x同型。
      h = pie(…) 返回一patch与text的图形对象句柄向量h。
例7-21
>>x = [1 3 0.5 2.5 2];
>>explode = [0 1 0 0 0];
>>pie(x,explode)
图形结果为图7-21。
7.1.3  二维图形注释命令
命令1  grid
功能  给二维或三维图形的坐标面增加分隔线。该命令会对当前坐标轴的Xgrid,Ygrid,Zgrid的属性有影响。
用法  grid on 给当前的坐标轴增加分隔线。
      grid off 从当前的坐标轴中去掉分隔线。
      grid 转换分隔线的显示与否的状态。
      grid(axes_handle,on|off) 对指定的坐标轴axes_handle是否显示分隔线。
命令2  gtext
功能  在当前二维图形中用鼠标放置文字。当光标进入图形窗口时,会变成一个大十字,表明系统正等待用户的动作。
用法  gtext('string') 当光标位于一个图形窗口内时,等待用户单击鼠标或键盘。若按下鼠标或键盘,则在光标的位置放置给定的文字“string”
      h = gtext('string') 当用户在鼠标指定的位置放置文字“string”后,返回一个text图形对象句柄给h。
命令3  legend
功能  在图形上添加图例。该命令对有多种图形对象类型(线条图,条形图,饼形图等)的窗口中显示一个图例。对于每一线条,图例会在用户给定的文字标签旁显示线条的线型,标记符号和颜色等。当所画的是区域(patch或surface对象)时,图例会在文字旁显示表面颜色。Matlab在一个坐标轴中仅仅显示一个图例。图例的位置有几个因素决定,像遮挡的对象等,用户可以用鼠标拖动图例到恰当的位置,双击标签可以进入标签编辑状态。
用法  legend('string1','string2',…) 用指定的文字string在当前坐标轴中对所给数据的每一部分显示一个图例。
      legend(h,'string1','string2',…) 用指定的文字string在一个包含于句柄向量h中的图形显示图例。用给定的数据对相应的图形对象加上图例。
      legend(string_matrix) 用字符矩阵参量string­_matrix的每一行字符串作为标签。
      legend(h,string_matrix) 用字符矩阵参量string­_matrix的每一行字符串作为标签给包含于句柄向量h中的相应的图形对象加标签。
      legend(axes_handle,…) 给由句柄axes_handle指定的坐标轴显示图例。
      legend('off') 从当前的坐标轴,或是由axes-handle指定的坐标轴中除掉图例。
      legend(axes_handle,'off') 从由axes_handle指定的坐标轴中除掉图例。
      legend_handle = legend 返回当前坐标轴中的图例句柄,若坐标轴中没有图例存在,则返回空向量。
      legend 对当前图形中所有的图例进行刷新。
      legend(legend_handle) 对由句柄legend_handle指定的图例进行刷新。
      legend(…,pos) 在指定的位置pos放置图例见表7-5。
表7-5
Pos取值 pos=-1 pos=0 Pos=1 
图例位置 坐标轴之外的右边 坐标轴之内,有可能遮挡部分图形 坐标轴的右上角(缺省位置) 
Pos取值 pos=2 pos=3 pos=4 
图例位置 坐标轴的左上角 在坐标轴的左下角 坐标轴的右下角 
      h = legend(…) 返回图例的句柄向量。
      [legend_handle,object_handles] = legend(…) 返回图例句柄,该句柄为坐标轴定义于图例中的图形对象、line对象、text对象的句柄。这些句柄允许用户对每个对象进行详细的操作。
例7-22
     >>x = -pi:pi/20:pi;
     >>plot(x,(cos(x)).^2,'rd',x,asin(x),'-.b')
     >>h = legend('cos2x','asin',2);
图形结果为图7-22。
命令4  title
功能  给当前轴加上标题。每个axes图形对象可以有一个标题。标题定位于axes的上方正中央。
用法  title('string') 在当前坐标轴上方正中央放置字符串string作为标题
      title(fname) 先执行能返回字符串的函数fname,然后在当前轴上方正中央放置返回的字符串作为标题
      title(…,'PropertyName',PropertyValue,…) 对由命令title生成的text图形对象的属性进行设置
      h = title(…) 返回作为标题的text对象句柄。
命令5  text
功能  在当前轴中创建text对象。函数text是创建text图形句柄的低级函数。可用该函数在图形中指定的位置上显示字符串。
用法  text(x,y,'string')在图形中指定的位置(x,y)上显示字符串string
     text(x,y,z,'string') 在三维图形空间中的指定位置(x,y,z)上显示字符串string
     text(x,y,z,’string’.'PropertyName',PropertyValue…) 对引号中的文字string定位于用坐标轴指定的位置,且对指定的属性进行设置。表7-6给出文字属性名、含义及属性值。
表7-6
属性名 属性说明 属性值 
定义字符串 
Editing 能否对文字进行编辑 有效值:on、off 缺省值:off 
Interpretation TeX字符是否可用 有效值:tex、none 缺省值:tex 
String 字符串(包括TeX字符串) 有效值:可见字符串 
放置字符串 
Extent text对象的范围(位置与大小) 有效值:[left, bottom, width, height] 
HorizontalAlignment 文字水平方向的对齐方式 有效值:left(文本外框左边对齐,缺省对齐方式)、center(文本外框中间对齐)、right(文本外框右边对齐) 缺省值:left 
Position 文字范围的位置 有效值:[x,y,z]直角坐标系 缺省值:[](空矩阵) 
Rotation 文字对象的方位角度 有效值:标量(单位为度) 缺省值:0 
Units 文字范围与位置的单位 有效值:pixels (屏幕上的像素点)、normalized (把屏幕看成一个长、宽为1的矩形)、inches(英寸)、centimeters(厘米)、points (图象点)、data 缺省值:data 
VerticalAlignment 文字垂直方向的对齐方式 有效值:top (文本外框顶上对齐)、cap(文本字符顶上对齐)、middle(文本外框中间对齐)、baseline(文本字符底线齐)、bottom(文本外框底线对齐)  缺省值:middle 
指定文字字体 
FontAngle 设置斜体文字模式 有效值:normal(正常字体)、italic(斜体字)、oblique(斜角字) 缺省值:normal 
FontName 设置文字字体名称 有效值:用户系统支持的字体名或者字符串FixedWidth。 缺省值为 Helvetica 
FontSize 文字字体大小 有效值:结合字体单位的数值 缺省值为:10 points 
FontUnits 设置属性FontSize的单位 有效值:points (1点=1/72英寸)、normalized(把父对象坐标轴作为一单位长的一个整体;当改变坐标轴的尺寸时,系统会自动改变字体的大小)、inches (英寸)、Centimeters(厘米)、Pixels(像素) 缺省值:points 
FontWeight 设置文字字体的粗细 有效值:light(细字体)、normal(正常字体)、demi(黑体字)、Bold(黑体字) 缺省值:normal 
控制文字外观 
Clipping 设置坐标轴中矩形的剪辑模式 有效值:on、off on:当文本超出坐标轴的矩形时,超出的部分不显示; off:当文本超出坐标轴的矩形时,超出的部分显示。 缺省值:off 
EraseMode 设置显示与擦除文字的模式。这些模式对生成动画系列与改进文字的显示效果很有好处。 有效值:normal、none、 xor、   background 缺省值:normal 
SelectionHighlight 设置选中文字是否突出显示 有效值:on、off 缺省值:on 
Visible 设置文字是否可见 有效值:on、off 缺省值:on 
Color 设置文字颜色 有效的颜色值:ColorSpec 
控制对文字对象的访问 
HandleVisibility 设置文字对象句柄对其他函数是否可见 有效值:on、callback、off 缺省值:on 
HitTest 设置文字对象能否成为当前对象(见图形CurrentObject属性) 有效值:on、off 缺省值:on 
文字对象的一般信息 
Children 文字对象的子对象(文字对象没有子对象) 有效值:[](即空矩阵) 
Parent 文字对象的父对象(通常为axes对象) 有效值:axes的句柄 
Seleted 设置文字是否显示出“选中”状态 有效值:on、off 缺省值:off 
Tag 设置用户指定的标签 有效值:任何字符串 缺省值:’’(即空字符串) 
Type 设置图形对象的类型(只读类型) 有效值:字符串’text’ 
UserData 设置用户指定数据 有效值:任何矩阵 缺省值:[](即空矩阵) 
控制回调例行执行程序 
BusyAction 设置如何处理对文字回调过程中断的句柄 有效值:cancel、queue 缺省值:queue 
ButtonDownFcn 设置当鼠标在文字上单击时,程序做出的反应(即执行回调程序) 有效值:字符串 缺省值:'  '(空字符串) 
CreateFcn 设置当文字被创建时,程序做出的反应(即执行的回调程序) 有效值:字符串 缺省值:'  '(空字符串) 
DeleteFcn 设置当文字被删除(通过关闭或删除操作)时,程序做出的反应(即执行的回调程序) 有效值:字符串 缺省值:'  '(空字符串) 
Interruptible 设置回调过程是否可中断 有效值:on、off 缺省值:on(能中断) 
UIContextMenu 设置与文字相关的菜单项 有效值:用户相关菜单句柄 
     h = text(…) 返回文字对象句柄的列向量,每一对象对应一句柄。该命令的其他使用形式中,将随意地返回这个输出参量。
例7-23
   >>plot(0:pi/20:2*pi,sin(0:pi/20:2*pi))
   >>text(pi,0,’Zeros Point’)
   >>grid on
图形结果为图7-23。
命令6  xlabel、ylabel
功能  给x、y轴贴上标签
用法  xlabel('string')、 ylabel(‘string’)  给当前轴对象中的x、y轴贴标签;注意:若再次执行xlabel或ylabel命令,则新的标签会覆盖旧的标签。
      xlabel(fname)、ylabel(fname) 先执行函数fname,其返回一个字符串,然后在x、y轴旁边显示出来;
      xlabel(…,'PropertyName',PropertyValue,…)、ylabel(…,’PropertyName’, PropertyValue)指定轴对象中的要控制的属性名和要改变的属性值,这些都是由xlabel或ylabel创建的text图形对象的成对值;
      h = xlabel(…)、h = ylabel(…)返回作为标签的text对象的句柄。
7.2  三维图形
7.2.1  三维曲线、面填色命令
命令1  comet3
功能  三维空间中的彗星图。彗星图为一个三维的动画图像,彗星头(一个小圆圈)沿着数据指定的轨道前进,彗星体为跟在彗星头后面的一段痕迹,彗星轨道为整个函数所画的实曲线。注意一点的是,该彗星轨迹的显示模式EraseMode为none,所以用户不能打印出彗星轨迹(只能得到一个小圆圈),且若用户调整窗口大小,则彗星会消失。
用法  comet3(z) 用向量z中的数据显示一个三维彗星
      comet3(x,y,z) 显示一个彗星通过数据x,y,z确定的三维曲线。
      comet3(x,y,z,p) 指定彗星体的长度为:p*length(y)。
例7-24
>>t = -20*pi:pi/50:20*pi;
>>comet3((cos(2*t).^2).*sin(t),(sin(2*t).^2).*cos(t),t);
图形的结果为图7-24。
命令2  fill3
功能  用指定的颜色填充三维多边形。阴影类型为平面型和Gouraud型。
用法  fill3(X,Y,Z,C) 填充由参数x,y和z确定多边形。若x,y或z为矩阵,fill3生成n个多边形,其中n为矩阵的列数。在必要的时候,fill3会自动连接最后一个节点和第一个节点。以便能形成封闭的多边形。参数c指定颜色,这儿c为引用当前色图的下标向量或矩阵。若c为行向量,则c的维数必须等于x的列数和y的列数,若c为列向量,则c的维数必须等于矩阵x的行数和y 的行数。
      fill3(X,Y,Z,ColorSpec) 用指定的颜色ColorSpec填充由x,y和z确定的多边形。
      fill3(X1,Y1,Z1,C1,X2,Y2,Z2,C2,…) 对多边形的不同区域用不同的颜色进行填充。
      fill3(…,'PropertyName',PropertyValue) 允许用户对特定的patch属性进行设置。
      h = fill3(…) 返回patch图形对象的句柄向量,每一块(patch)对应一个句柄。
运算规则:
1.若X,Y,Z为同型的矩阵,fill3生成X,Y,Z中相同位置的元素确定的顶点,每一列生成一个多边形。
2.若只有X,Y或Z为矩阵,则fill3由列向量参数生成可用的同型矩阵。
3.若用户对填充的颜色指定为ColorSpec,则fill3生成阴影类型为flat-shaded的多边形,且设置块(patch)的属性FaceColor为RGB颜色形式的矩阵。
4.若用户用矩阵C指定颜色,命令fill3通过坐标轴属性Clim来调整C中的元素,在引用当前色图之前,用于指定颜色坐标轴的参数比例。
5.若参数C为一行向量,命令fill3生成带平面阴影(flat-shaded)的多边形,同时设置补片对象的面颜色(FaceColor)属性为flat。向量c中的每一元素成为每一补片对象的颜色数据(CData)属性的值。
6.若参数C为一矩阵,命令fill3生成带内插颜色的多边形,同时设置多边形补片对象的FaceColor属性为interp。命令fill3采用对多边形顶点色图的下标指定的颜色采用线性内插算法,同时多边形的颜色采用对顶点颜色用内插算法得到的颜色。矩阵C的每一列元素变成对应补片对象的Cdata属性值。
7.若参数C为一列向量,命令fill3先复制C的元素,使之成为所需维数的矩阵,再按上面的方法6进行计算。
例7-25
>>X = 10*rand(4);Y=10*rand(4);Z=10*rand(4);
>>C = rand(4);
>>fill3(X,Y,Z,C)
图形结果可能为图7-25。
7.2.2  三维图形等高线
命令1  contour
功能  曲面的等高线图
用法  contour(z)  把矩阵z中的值作为一个二维函数的值,等高曲线是一个平面的曲线,平面的高度v是Matlab自动取的;
      contour(x,y,z)  (x,y)是平面z=0上点的坐标矩阵,z为相应点的高度值矩阵。效果同上;
      contour(z,n)  画出n条等高线;
      contour(x,y,z,n)  画出n条等高线;
      contour(z,v)  在指定的高度v上画出等高线;
      contour(x,y,z,v)  同上;
      [c,h] = contour(…)  返回如同contourc命令描述的等高矩阵c和线句柄或块句柄列向量h,这些可作为clabel命令的输入参量,每条线对应一个句柄,句柄中的userdata属性包含每条等高线的高度值;
      contour(…,’linespec’)  因为等高线是以当前的色图中的颜色画的,且是作为块对象处理的,即等高线是一般的线条,我们可象画普通线条一样,可以指定等高线的颜色或者线形。
例7-26
    >>contour(peaks(40))
图形结果为图7-26。
命令2  clabel
功能  在二维等高线图中添加高度标签。在下列形式中,若有h出现,则会对标签进行恰当的旋转,否则标签会竖直放置,且在恰当的位置显示个一个“+”号。
用法  clabel(C,h) 把标签旋转到恰当的角度,再插入到等高线中。只有等高线之间有足够的空间时才加入,当然这决定于等高线的尺度。
      clabel(C,h,v) 在指定的高度v上显示标签h,当然要对标签做恰当的处理。
      clabel(C,h,'manual') 手动设置标签。用户用鼠标左键或空格键在最接近指定的位置上放置标签,用键盘上的回车键结束该操作。当然会对标签做恰当的处理。
      clabel(C) 在从命令contour生成的等高线结构c的位置上添加标签。此时标签的放置的位置是随机的。
      clabel(C,v) 在给定的位置v上显示标签
      clabel(C,'manual') 允许用户通过鼠标来给等高线贴标签
例7-27
>>[x,y] = meshgrid(-2:.2:2);
>>z = x.*y.*exp(-x.^2-y.^2);
>>[C,h] = contour(x,y,z);
>>clabel(C,h);
图形结果为图7-27。
命令3  contourc
功能  低级等高线图形计算命令。该命令计算等高线矩阵c,该矩阵可用于命令contour,contour3和contourf等。矩阵z中的数值确定平面上的等高线高度值,等高线的计算结果用由矩阵z维数决定的间隔的宽度。
用法  C = contourc(Z) 从矩阵z中计算等高矩阵,其中z的维数至少为2*2阶,等高线为矩阵z中数值相等的单元。等高线的数目和相应的高度值是自动选择的。
     C = contourc(Z,n) 在矩阵z中计算出n个高度的等高线。
     C = contourc(Z,v) 在矩阵z中计算出给定高度向量v上计算等高线,当然向量v的维数决定了等高线的数目。若只要计算一条高度为a的等高线,输入:contourc(Z,[a,a]);
     C = contourc(x,y,Z) 在矩阵z中,参量x,y确定的坐标轴范围内计算等高线;
     C = contourc(x,y,Z,n) 从矩阵Z中,参量x与y确定的坐标范围内画出n条等高线;
     C = contourc(x,y,Z,v) 从矩阵Z中,参量x与y确定的坐标范围内,画在v指定的高度上指定的等高线。
命令4  contour3
功能  三维空间等高线图。该命令生成一个定义在矩形格栅上曲面的三维等高线图。
用法  contour3(Z) 画出三维空间角度观看矩阵z的等高线图,其中z的元素被认为是距离xy平面的高度,矩阵z至少为2*2阶的。等高线的条数与高度是自动选择的。若[m,n]=size(z),则x轴的范围为[1:n],y轴的范围为[1:m]。
      contour3(Z,n) 画出由矩阵z确定的n条等高线的三维图。
      contour3(Z,v) 在参量v指定的高度上画出三维等高线,当然等高线条数与向量v 的维数相同;若想只画一条高度为h的等高线,输入:contour3(Z,[h,h])
      contour3(X,Y,Z)、contour3(X,Y,Z,n)、contour3(X,Y,Z,v) 用X与Y定义x-轴与y-轴的范围。若X为矩阵,则X(1,:)定义x-轴的范围;若Y为矩阵,则Y(:,1)定义y-轴的范围;若X与Y同时为矩阵,则它们必须同型。不论为哪种使用形式,所起的作用与命令surf相同。若X或Y有不规则的间距,contour3还是使用规则的间距计算等高线,然后将数据转变给X或Y。
      contour3(…,LineSpec) 用参量LineSpec指定的线型与颜色画等高线。
      [C,h] = contour3(…) 画出图形,同时返回与命令contourc中相同的等高线矩阵C,包含所有图形对象的句柄向量h;除非没有指定LineSpec参数,contour3将生成patch图形对象,且当前的colormap属性与caxis属性将控制颜色的显示。不论使用何种形式,该命令都生成line图形对象。
例7-28
>>[X,Y] = meshgrid([-2:.25:2]);
>>Z = X.*exp(-X.^2-Y.^2);
>>contour3(X,Y,Z,30)
图形结果为图7-28。
命令5  contourf
功能  填充二维等高线图。即先画出不同等高线,然后相邻的等高线之间用同一颜色进行填充。填充用的颜色决定于当前的色图颜色。
用法  contourf(Z) 矩阵z的等高线图,其中z理解成距平面的高度。Z至少为2*2阶的。等高线的条数与高度是自动选择的。
      contourf(Z,n) 画出矩阵z的n条高度不同的等高线。
      contourf(Z,v) 画出矩阵z的、由v指定的高度的等高线图。
      contourf(X,Y,Z)、contourf(X,Y,Z,n)、contourf(X,Y,Z,v) 画出矩阵z的等高线图,其中X与Y用于指定x-轴与y-轴的范围。若X与Y为矩阵,则必须与Z同型。若X或Y有不规则的间距,contour3还是使用规则的间距计算等高线,然后将数据转变给X或Y。
      [C,h,CF] = contourf(…)画出图形,同时返回与命令contourc中相同的等高线矩阵C,C也可被命令clabel使用;返回包含patch图形对象的句柄向量h;返回一用于填充用的矩阵CF。
例7-29
>>contourf(peaks(30),20);
>>colormap gray
图形结果为图7-29。
命令6  pie3
功能  三维饼形图
用法  pie3(X) 用x中的数据画一个三维饼形图。X中的每一个元素代表三维饼形图中的一部分。
      pie3(X,explode) x中的某一部分可以从三维饼形图中分离出来。explode是一个与x同型的向量或矩阵,explode中非零的元素对应x中从饼形图中分离出来的分量。
      h = pie3(…) 返回一个分量为patch,surface和text图形句柄对象的向量。即每一块对应一个句柄。
注意:命令pie3将x的每一个元素在所有元素的总和中所占的比例表达出来。若x中的分量和小于1(则所有元素小于1),则认为x中的值指明三维饼形图的每一部分的大小。
例7-30
    >>x = [1 3 0.5 2.5 2]
    >>ex = [0 1 0 0 0]
    >>pie3(x,ex)
图形结果为图7-30。
7.2.3  曲面与网格图命令
命令1  mesh
功能  生成由X,Y和Z指定的网线面,由C指定的颜色的三维网格图。网格图是作为视点由view(3)设定的surface图形对象。曲面的颜色与背景颜色相同(当要动画显示不透明曲面时,这时可用命令hidden控制),或者当画一个标准的可透视的网线图时,曲面的颜色就没有(命令shading控制渲染模式)。当前的色图决定线的颜色。
用法  mesh(X,Y,Z) 画出颜色由c指定的三维网格图,所以和曲面的高度相匹配,
1.若X与Y均为向量,length(X)=n,length(Y)=m,而[m,n]=size(Z),空间中的点 (X(j),Y(I),Z(I,j)) 为所画曲面网线的交点,分别地,X对应于z的列,Y对应于z的行。
2.若X与Y均为矩阵,则空间中的点 (X(I,j),Y(I,j),Z(I,j))为所画曲面的网线的交点。
      mesh(Z) 由[n,m] = size(Z)得,X =1:n与Y=1:m,其中z为定义在矩形划分区域上的单值函数。
mesh(…,C) 用由矩阵c指定的颜色画网线网格图。Matlab对矩阵c中的数据进行线性处理,以便从当前色图中获得有用的颜色。
mesh(…,PropertyName’,PropertyValue, …) 对指定的属性PropertyName设置属性值PropertyValue,可以在同一语句中对多个属性进行设置。
h = mesh(…) 返回surface图形对象句柄。
运算规则:
1.数据X,Y和z的范围,或者是对当前轴的XLimMode,YLimMode和ZLimMode属性的设置决定坐标轴的范围。命令aXis可对这些属性进行设置。
2.参量c的范围,或者是对当前轴的Clim和ClimMode属性的设置(可用命令caxis进行设置),决定颜色的刻度化程度。刻度化颜色值作为引用当前色图的下标。
3.网格图显示命令生成由于把z的数据值用当前色图表现出来的颜色值。Matlab会自动用最大值与最小值计算颜色的范围(可用命令caxis auto进行设置),最小值用色图中的第一个颜色表现,最大值用色图中的最后一个颜色表现。Matlab会对数据的中间值执行一个线性变换,使数据能在当前的范围内显示出来。
例7-31
>>[X,Y] = meshgrid(-3:.125:3);
>>Z = peaks(X,Y);
>>mesh(X,Y,Z);
图形结果为图7-31。
命令2  surf
功能  在矩形区域内显示三维带阴影曲面图。
用法  surf(Z) 生成一个由矩阵z确定的三维带阴影的曲面图,其中 [m,n] = size(Z),而X = 1:n,Y = 1:m。高度z为定义在一个几何矩形区域内的单值函数,z同时指定曲面高度数据的颜色,所以颜色对于曲面高度是恰当的。
      surf(X,Y,Z) 数据z同时为曲面高度,也是颜色数据。X和Y为定义X坐标轴和Y坐标轴的曲面数据。若X与Y均为向量,length(X)=n,length(Y)=m,而[m,n]=size(Z),在这种情况下,空间曲面上的节点为(X(I),Y(j),Z(I,j))。
      surf(X,Y,Z,C) 用指定的颜色c画出三维网格图。Matlab会自动对矩阵c中的数据进行线性变换,以获得当前色图中可用的颜色。
      surf(…,’PropertyName’,PropertyValue) 对指定的属性PropertyName设置为属性值PropertyValue
      h = surf(…) 返回一个surface图形对象句柄给变量h。
运算规则:
1.严格地讲,一个参数曲面是由两个独立的变量I、j来定义的,它们在一个矩形区域上连续变化。例如,a<=I<=b,c<=j<=d,三个变量X,Y,Z确定了曲面。曲面颜色由第四参数矩阵C确定。
2.矩形定义域上的点有如下关系:
                           A(I-1,j)
                              |
                  B(I,j-1) ---- C(I,j) ---- D(I,j+1)
                              |
                           E(I+1,j)
这个矩形坐标方格对应于曲面上的有四条边的块,在空间的点的坐标为[X(J,Y(J,Z),每个矩形内部的点根据矩形的下标和相邻的四个点连接;曲面上的点只有相邻的三个点,曲面上四个角上的点只有两个相邻点,上面这些定义了一个四边形的网格图。
3.曲面颜色可以有两种方法来指定:指定每个节点的颜色或者是每一块的中心点颜色。在这种一般的设置中,曲面不一定为变量X和Y的单值函数,进一步而言,有四边的曲面块不一定为平面的,而可以用极坐标,柱面坐标和球面坐标定义曲面。
4.命令shading设置阴影模式。若模式为interp,C必须与X,Y,Z同型;它指定了每个节点的颜色,曲面块内的颜色由附近几个点的颜色用双线性函数计算出来的。若模式为facted(缺省模式)或flat,c(I,j)指定曲面块中的颜色:
                   A(I,j)----------- B (I,j+1)
                     |    C(I,j)     |
                  C(I+1,j) --------- D(I+1,j)
在这种情形下,C可以与X,Y,和Z同型,且它的最后一行和最后一列将被忽略,换句话说,就是C的行数和列数可以比X,Y,Z少1。
5.命令surf将指定图形视角为view(3)。
6.数据X,Y,Z的范围或者通过对坐标轴的属性XlimMode,YlimMode和ZlimMode的当前设置(可以通过命令axis来设置),将决定坐标轴的标签。
7.参数C的范围或者通过对坐标轴的属性Clim和ClimMode的设置(可以通过命令caxis来设置),将决定颜色刻度化。刻度化的颜色值将作为引用当前色图的下标。
例7-32
>>[X,Y,Z] = peaks(30);
>>surf(X,Y,Z)
>>colormap hsv
结果图形为图7-32。
命令3  surfc
功能  在矩形区域内显示三维带阴影曲面图,且在曲面下面画出等高线。
用法  surfc(Z)、surfc(X,Y,Z)、 surfc(X,Y,Z,C)、
      surfc(…,’PropertyName’,PropertyValue)、
      surfc(…)、 h = surfc(…)
     上面各个使用形式的曲面效果与命令surf的相同,只不过是在曲面下面增加了曲面的等高线而已。
例7-33
>>[X,Y,Z] = peaks(30);
>>surfc(X,Y,Z)
>>colormap hsv
图形结果为图7-33。
命令4  surfl
功能  画带光照模式的三维曲面图。该命令显示一个带阴影的曲面,结合了周围的,散射的和镜面反射的光照模式。想获得较平滑的颜色过度,要使用有线性强度变化的色图(如:gray,copper,bone,pink等)。参数X,Y,Z确定的点定义了参数曲面的“里面”和“外面”,若用户想曲面的“里面”有光照模式,只要使用:
           surfl(X’,Y’,Z’)   
用法  surfl(Z) 以向量z的元素生成一个三维的带阴影的曲面,其中阴影模式中的光源的方位、光照系数为缺省值(见下面)。
      surfl(X,Y,Z) 以矩阵X,Y,Z生成的一个三维的带阴影的曲面,其中阴影模式中的光源的方位、光照系数为缺省值(见下面)。
      surfl(…,’light’) 用一个matlab光照对象(light object)生成一个带颜色、带光照的曲面,这与用缺省光照模式产生的效果不同。
      surfl(…,’cdata’) 改变曲面颜色数据(color data),使曲面成为可反光的曲面。
      surfl(…,s) 指定光源与曲面之间的方位s,其中s为一个二维向量[azimuth,elevation],或者三维向量[sx,sy,sz]。缺省光源方位为从当前视角开始,逆时针45℉(度)。
      surfl(X,Y,Z,s,k) 指定反射常系数k,其中k为一个定义环境光(ambient light)系数(0<=ka<=1)、漫反射(diffuse reflection)系数(0〈=kb〈=1〉、镜面反射(specular reflection)系数(0〈=ks〈=1〉与镜面反射亮度(以相素为单位)等的四维向量[ka,kd,ks,shine],缺省值为k=[0.55 0.6 0.4 10]。
      h = surfl(…) 返回一个曲面图形句柄向量h。
例7-34
>>[X,Y] = meshgrid(-3:1/8:3);
>>Z = peaks(X,Y);
>>surfl(X,Y,Z);
>>shading interp
>>colormap(gray);
图形结果为图7-34。
命令5  waterfall
功能  瀑布图
用法  waterfall(X,Y,Z) 用所给参数X、Y与Z的数据画一“瀑布”效果图。若X与Y都是向量,则X与Z的列相对应,Y与Z的行相对应,即length(X)=Z的列数,length(Y)=Z的行数。参数X与Y定义了x-轴与y-轴,Z定义了z-轴的高度,Z同时确定了颜色,所以颜色能恰当地反映曲面的高度。若想研究数据的列,可以输入:waterfall(Z’)或waterfall(X’,Y’,Z’)
      waterfall(Z) 画出一瀑布图,其中缺省地有:X=1:Z的行数,Y=1:Z的行数,且Z同时确定颜色,所以颜色能恰当地反映曲面高度。
      waterfall(…,C) 用比例化的颜色值从当前色图中获得颜色,参量C决定颜色的比例,为此,必须与Z同型。系统使用一线性变换,从当前色图中获得颜色。
      h = waterfall(…) 返回patch图形对象的句柄h,可用于画出图形。
例7-35
>>[X,Y,Z] = peaks(30);
>>waterfall(X,Y,Z)
图形结果为图7-35。
命令6  cylinder
功能  生成圆柱图形。该命令生成一单位圆柱体的x-,y-,z-轴的坐标值。用户可以用命令surf或命令mesh画出圆柱形对象,或者用没有输出参量的形式而立即画出图形。
用法  [X,Y,Z] = cylinder 返回一半径为1、高度为1的圆柱体的x-,y-,z-轴的坐标值,圆柱体的圆周有20个距离相同的点。
      [X,Y,Z] = cylinder® 返回一半径为r、高度为1的圆柱体的x-,y-,z-轴的坐标值,圆柱体的圆周有20个距离相同的点。
      [X,Y,Z] = cylinder(r,n) 返回一半径为r、高度为1的圆柱体的x-,y-,z-轴的坐标值,圆柱体的圆周有指定的n个距离相同的点。
      cylinder(…) 没有任何的输出参量,直接画出圆柱体。
例7-36
>>t = 0:pi/10:2*pi;
>>[X,Y,Z] = cylinder(2+(cos(t)).^2);
>>surf(X,Y,Z); axis square
图形结果为图7-36。
命令7  sphere
功能  生成球体
用法  sphere 生成三维直角坐标系中的单位球体。该单位球体由20*20个面。
      sphere(n) 在当前坐标系中画出有n*n个面的球体
      [X,Y,Z] = sphere(n) 返回三个阶数为(n+1)*(n+1)的,直角坐标系中的坐标矩阵。该命令没有画图,只是返回矩阵。用户可以用命令surf(X,Y,Z)或mesh(X,Y,Z)画出球体。
例7-37
>>[X,Y,Z]=sphere;
>>mesh(X,Y,Z)
>>hidden off
图形结果为图7-37。
7.2.4  三维数据的其他表现形式命令
命令1  pcolor
功能  伪彩色图。该图为一矩形单元的、由参数c定义了颜色的阵列,系统通过c中的每相邻的四点定义的曲面补片而生成一伪彩色图。是从上面向下观看的“平面”曲面图。若用户使用命令shading faceted或shading flat,则每一单元的固定颜色是与之相连的角的颜色有关的。所以,C(i,j)定义了单元的地i行与地j列的颜色。C中的最后一行与最后一列都没有用上。若用户使用命令shading interp,则每一单元的颜色是对它的四个顶点的颜色进行一双线性插值后的颜色,这时c的所有元素都参加了运算。
用法  pcolor(C) 画一伪彩色图。C中的元素都线性地映射于当前色图下标。从C映射到当前的色图是由命令colormap和caxis定义的。
      pcolor(X,Y,C) 在参数x和y指定的位置上画一由C确定的为彩色图。该图为一逻辑上为矩形、带二维格栅的、顶点在[X(i,j),Y(i,j)]的图形(若X和Y为矩阵时)。参量X与Y为指定格栅线的向量或矩阵。若X与Y为向量,则X对应于C的列,而y对应于C的行;若X与Y同为矩阵,则必须为同型矩阵。该命令等价于命令:surf(X,Y,0,C),观察角度为:view([0,90])。
      h = pcolor(…) 返回一surface图形对象句柄于h
例7-38
>>pcolor(magic(20))
>>colormap(gray(2))
>>axis ij;axis square
图形结果为图7-38。
命令2  quiver
功能  矢量图或速度图
用法  quiver(U,V) 在范围为x =1:n和y =1:m的坐标系中显示由U和V定义的向量,而[m,n]=size(U)=size(V),这种形式是在一个几何矩形中画出U和V的,quiver命令本身会自动地画出这些向量,使之不会重叠。
      quiver(X,Y,U,V) 由向量X和Y中的分量的任意组合而成的向量与。若X与Y都是向量length(X)=n,而length(Y)=m,而[m,n]=size(U)=size(V),向量X对应于矩阵U、V的列向量,而向量Y对应于矩阵U、V的行向量。
      quiver(…,scale) 自动对向量的长度进行处理。使之不会重叠,当然可以对scale进行取值,若scale=2,则向量长度伸长2倍,若scale=0,则如实画出向量图。
      quiver(…,LineSpec) 可以指定画矢量图用的线型,符号,颜色,quiver命令会在原来的向量图上画出记号。
      quiver(…,LineSpec,'filled') 对用LineSpec指定的记号进行填充
      h = quiver(…) 返回每个向量图的句柄
例7-39
   >>[z,x,y]=peaks(30);
   >>[Dx,Dy]=gradient(z,0.1,0.1);
   >>quiver(x,y,Dx,Dy)
图形结果为图7-39。
命令3  slice
功能  立体切片图。该命令显示通过立体图形的矩形切片图。
用法  slice(X,Y,Z,V,sx,sy,sz) 显示三元函数V=V(X,Y,Z)确定的超立体形在x-轴、y-轴与z-轴方向上的若干点(对应若干平面。即若函数V=V(X,Y,Z)中有一变量如X取一定值X0,则函数V=V(X0,Y,Z)变成一立体曲面(只不过是将该曲面通过颜色表示高度V,从而显示于一平面而已。)的切片图,各点的坐标由参量向量sx、sy与sz指定。参量X、参量Y与参量Z为三维数组,用于指定立方体V的坐标。参量X、Y与Z必须有单调的、正交的间隔(如同用命令meshgrid生成的一样)。在每一点上的颜色由对超立体 V的三维内插值确定。
      slice(V,sx,sy,sz) 显示三元函数V=V(X,Y,Z)确定的超立体形在x-轴、y-轴与z-轴方向上的若干点(对应若干平面)的切片图,各点的坐标由数量向量sx、sy与sz指定。其中V为三维数组(阶数为m*n*p),缺省地有:X = 1:m、Y = 1:n、Z = 1:p。
      slice(V,XI,YI,ZI) 显示参量矩阵XI、YI与ZI确定的、超立体图形的切面图。参量XI、YI与ZI定义了一曲面,同时会在曲面的点上计算超立体V的值。参量XI、YI与ZI必须为同型矩阵。
      slice(X,Y,Z,V,XI,YI,ZI) 沿着由矩阵XI、YI与ZI定义的曲面画穿过超立体图形V的切片。
      slice(…,'method') 指定内插值的方法。‘method’为如下方法之一:‘linear’、
‘cubic’、‘nearest’:
             ‘linear’——指定使用三次线性内插值法(该状态为缺省的);
             ‘cubic’——  指定使用三次立方内插值法;
             ‘nearest’——指定使用最近点内插值法。
      h = slice(…) 返回一曲面图形对象的句柄向量h。
命令4  axis
功能  坐标轴的刻度与外在显示
用法  axis([xmin xmax ymin ymax]) 设置当前坐标轴的x-轴与y-轴的范围。
      axis([xmin xmax ymin ymax zmin zmax cmin cmax]) 设置当前坐标轴的x-轴、y-轴与z-轴的范围,当前颜色刻度范围。该命令也同时设置当前坐标轴的属性  Xlim、Ylim与Zlim为所给参数列表中的最大值和最小值。另外,坐标轴属性XlimMode、YlimMode与ZlimMode设置为‘manual’。
      v = axis 返回一包含x-轴、y-轴与z-轴的刻度因子的行向量,其中v为一四维或六维向量,这取决于当前坐标为二维还是三维的。返回的值包含当前坐标轴的XLim、Ylim与Zlim属性值。
      axis auto 设置系统到它的缺省动作——自动计算当前轴的范围,这取决于输入参量x,y与z的数据中的最大值与最小值。同时将当前坐标轴的属性XlimMode、YlimMode与ZlimMode设置为‘auto’用户可以指定对某一坐标轴进行自动操作。例如:
                 axis ’auto x’  将自动计算x-轴的范围;
                 axis ’auto yz’ 将自动计算y-轴与z-轴的范围。
      axis manual 、axis(axis) 把坐标固定在当前的范围,这样,若保持状态(hold)为on,后面的图形仍用相同界限。该命令设置了属性XLimMode、属性YLimMode与属性ZlimMode为manual。
      axis tight 把坐标轴的范围定为数据的范围,即坐标轴中没有多余的部分。
      axis fill 该命令用于将坐标轴的取值范围分别设置为绘图所用数据在相应方向上的最大、最小值。
      axis ij 使用矩阵坐标系:坐标原点在左上角、横坐标(j-轴)的值从左到右增加,纵坐标(i-轴)的值从上到下增加。
      axis xy使用笛卡儿坐标系(缺省):坐标原点在左下角、横坐标(x-轴)的值从左到右增加,纵坐标(y-轴)的值从下到上增加。
      axis equal 设置坐标轴的纵横比,使在每个方向的?

  评论这张
 
阅读(175)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017