Matlab绘图基础

    在做毕业设计时,经常用到Matlab 中几个常见的绘图函数:plot,scatter,line,由于对这几个函数背后的原理不是很了解,在使用时经常需要利用help功能。于是在业余时间看了一些相关的资料, 有了这篇blog。

为了熟练的使用这几个函数,我们需要了解Matlab中的几个有关图形的概念。

1. 图形对象的概念

            Matlab中每一个图形是由多基本对象组合叠加而成的。运行Matlab,在命令窗口输入相关的命令,可以生成一个或者多个图像窗口(figure)。Matlab中各种对象间关系如下图:

 

                                  图1 Matlab中个对象关系

    在Matlab绘出的图形中,一切皆对象,一般用对象句柄来区分不同的对象,句柄即一个整数值或浮点数值。在上图中:

    root为根元素,根元素只有一个,在matlab启动后即存在,并且不能被删除,根元素的句柄值为0,根元素对应整个屏幕。root对象可以看成是figure对象的容器,一个root对象中可以含有多个figure对象。

    figure对象是Matlab中绘图命令产生的一个个独立的显示图形的窗口。一个标题为figure的窗口就是一个figure对象。figure是axes(坐标系),ui-objects等对象的直接容器。figure的句柄值一般为整数。除去root, fiture对象,其余对象的句柄为浮点型。

    axes是坐标系的意思,在一个图像窗口(figure)中,通常只有一个坐标系,但使用subplot函数时,一个figure窗口中可以有多个axes对象。axes 又是其他多种对象的容器,用来在其上显示子对象,如line,text,image等。

    ui-objects:用户界面上的一些对象,可分为uicontrol,uimenu,uicontextmenu。用于设置用户界面上的一些控制对象(如pushbutton, listbox, slider等),菜单,窗口滑块等。

                                                                                                       图2 Matlab中各种图形对象说明

        uiobjects 可以分为uicontrol、uimenu、uicontextmenu三个对象,三个对象在创建GUI时比较有用。Uicontrol在当figure上某个控件被激活时,调用相应的回调函数。uimenu对象则是一些下拉菜单,出现在一个figure窗口的顶部,当用户选择一个菜单选项时,调用相应的回调函数。

        axes对象在一个figure对象上定义了一个区域,并在该区域内给它的子对象配置相应的属性。一个figure窗口上可以有多个axes对象。axes的子对象可以由相应的高层函数来创建,比如Line对象可用plot,line等函数创建,Text对象可以用title,xlabel,ylabel等创建。这里不再一一详述。

2. 对象的创建

     root: root在Matlab运行时就开始存在,无需自己创建

     figure:figure可以用命令figure显式地来创建。当没有显式创建时,使用各种绘图命令都会自动创建figure对象。

     axes: 用命令axes来创建,当没有显式创建时,使用各种绘图命令都可以创建axes.

3. 对象的属性

  Matlab图形的外观及行为都由各个对象的属性来控制。属性的以 (属性名=属性值) 的形式来表示。可以用set(obj_handle)返回对象obj的所有属性及其值。

  figure 对象常用属性:

     color: 图像的color属性。使用:set(gcf,'color',[0.4 0.4 0.4]) 设置当前figure对象的颜色, gcf(get current figure)表示当前活动的figure对象。get(fh,'color'),句柄为fh的图像的颜色属性。

     children: get(gcf,'children') 返回当前figure对象的子对象(axes),数组形式

     type: figure对象的type值为 'figure'

     返回一个figure对象的所有属性键值对,set(figure_handle)

   axes对象的常用属性:

     parent: 返回一个axes对象的父对象(figure)句柄值

     color: 表示坐标系颜色

     xcolor,ycolor,zcolor: 各坐标轴颜色,可以用set来设置.

     children: 子对象

4. 几个重要的变量和命令

     在获取和设置图像对象属性的过程中,变量gcf,gca和函数set,get经常会被经常的使用到。

  gcf: 表示当前的活动的figure对象

  gca:表示当前被选中的axes

  set: 用来设置一个已存在的图像属性值,用法:set(object_handle,'PropertyName','NewPropertyValue')

  get:查询一个已存在的图像属性值,用法:PropertyValue=get(object_handle,'PropertyName')

5. 几个绘图函数的使用

a. plot函数  

    plot函数绘制的line对象,当没有指定figure,axes对象时,调用plot函数会自动创建figure,axes对象。在line对象中,经常需要设置的对象有:Color, LineWidth, Marker, MarkerFaceColor, MarkerEdgeColor。绘制图2中第一个图形的代码

x=-pi:pi/10:pi;
y
=sin(tan(x))-tan(sin(x)); fh=figure(1); %创建figure对象 set(fh,'color','w'); %设置figure对象颜色为白色 subplot(2,2,1); lh=plot(x,y,'-.or'); %设置线型为点画线(-.),线颜色为红色,数据点Marker为圆形,这些属性设置也可以用set单独设置
             %在plot中设置这三个属性的格式为:'linestyle-MarkerType-linecolor'
text(x(7),y(7),'\leftarrow sin(tan(x))-tan(sin(x))','color','k') set(gca,'color',ones(1,3).*1); %设置坐标系颜色为RGB格式 set(lh,'MarkerFaceColor','g') %设置Marker颜色为绿色(green) set(gca,'xcolor','k','ycolor','k'); %设置坐标轴颜色 box on;

 对于line, scatter函数,用法基本与plot一致。

在Matlab中,将绘制出来的图形为fig格式后,当我们以后以后需要调用该图形时,仍然可以从该图形中恢复出各坐标值。对于图2中第一个图形,坐标值可采用如下方式恢复:

fh=open('blogfig.fig'); %假设图2被保存为blogfig.fig,且在当前目录中
subfig=get(fh,'children');
for i=1:length(subfig)
    fprintf('%s\n',get(subfig(i),'type');
end
subaxes=get(subfig(7),'children');
for i=1:length(subaxes)
    fprintf('%s\n',get(subaxes(i),'type');
end

x=get(subaxes(2),'xdata');
y=get(subaxes(2),'ydata');

结果为:

uicontrol
uicontrol
uicontrol
axes
axes
axes
axes

text
line

    从结果中可以看出,图2中figure对象共有7个直接子对象,其中3个uicontrol对象,4个axes对象。为了找出图2中第一个坐标系中的数据,需判断7个子对象中哪一个为第一个坐标系对象,可以通过测试axes子对象的类型来判断,最终判断结果为子对象7与第一个坐标系相对应。子对象7的children有两个返回值,类型分别为text和line。line对象拥有子对象XData,YData,所以可以从这些子对象中提取出坐标值来。

posted @ 2013-06-20 19:05  ileng  阅读(1036)  评论(0编辑  收藏  举报