zoukankan      html  css  js  c++  java
  • MATLAB学习笔记(十)——MATLAB图形句柄

    (一)图形对象及其句柄

    一、图形对象

           MATLAB图形对象包括:

    image

    1、MATLAB每一个具体图形一定包括计算机屏幕和图形窗口两个对象

    二、图形对象句柄

    1、定义

         MATLAB在创建每一个图形对象时,都会给该对象分配一个唯一确定的值,称其为图形对象句柄。

    PS:(1)计算机屏幕句柄默认为0.

          (2)图形窗口对象的句柄值为一正整数,并显示在窗口标题栏中

          (3)其他图形对象的句柄为浮点数。

    2、获取已有对象的句柄

    image

    3、一个demo

    x=linspace(0,2*pi,30);
    y=sin(x);
    
    h0=plot(x,y,'r')    %曲线对象的句柄
    h1=gcf              %图形窗口句柄
    h2=gca              %坐标轴句柄
    h3=findobj(gca,'Marker','x')            %坐标轴上曲线的句柄

    运行结果如下:

    h0 =
    
      174.0016
    
    
    h1 =
    
         1
    
    
    h2 =
    
      173.0011
    
    
    h3 =
    
       Empty matrix: 0-by-1

    image

    (二)图形对象属性

    一、属性名与属性值

    属性名:每种对象的每个属性都规定好了名字,一般为其英文单词,一般要用单撇号括起来

    属性值:每种属性名的取值

    二、属性的操作

    1、set函数

        创建对象时,需要配置各个属性,否则将会以缺省值进行创建。

    (1)调用格式

    set(句柄,属性名1,属性值1,属性名2,属性值2,……)
    %其中句柄指明要操作的对象
    %set中的属性可以全部缺省

    (2)一个demo。

    x=0:pi/10:2*pi;
    h=plot(x,sin(x));
    set(h,'Color','b','LineStyle',':','Marker','p');

    image

    2、get函数

         我们还可以通过get得到属性值,再进行改变

    (1)调用格式

    V=get(句柄,属性名)
    %V是返回的属性值
    %如果省略属性名,则返回句柄的所有属性值。

    (2)demo

    x=linspace(0.2*pi,20);
    y=sin(x);
    h=plot(x,y);
    col=get(h,'Color');                %得到曲线的颜色
    
    
    V=get(0,'ScreenSize');         %得到当前窗口的平屏幕分辨率

    三、对象的公共属性

    1、Children属性:

         取值是该对象所有子对象的句柄组成的一个向量。

    2、Parent属性:

         取值是该对象父对象的句柄。

    3、Tag属性:

         取值是一个字符串,作为对象的一个标识符(别名)

    4、Type属性:

         表示该对象的类型(显然是不可以改变的)

    5、UserData属性:

         该属性的取值是一个矩阵,缺省值为空矩阵。一般将一个图形对象有关的比较重要的数据储存在这个属性中,借此达到传送数据的作用。

    一般做法:先用set函数给某一句柄添加一些附加数据(一个矩阵),如果想使用这样的矩阵,再用get调用出来。

    6、Visible属性:

         取值是on(缺省值)或off。决定是否显示在屏幕上。但是不显示不代表不存在。

    7、ButtonDownFcn属性:

         取值是一个字符串,一般是某个M文件名或一段MATLAB程序。图形对象巨鼎了一个作用区域,当单击该区域时,MATLAB自动执行该程序段。

    8、CreatFcn属性:

         取值是一个字符串,一般是某个M文件名或一段MATLAB程序。当创建该对象时自动自行该程序段(同构造函数)

    9、DeleteFcn属性:

         取值是一个字符串,一般是某个M文件名或一段MATLAB程序。当取消该对象时自动自行该程序段(同析构函数)

    一个demo:

    image

    x=0:pi/50:2*pi;
    y=sin(x);
    z=cos(x);
    plot(x,y,'r',x,z,'g');
    
    H1=get(gca,'Children');      %获取两曲线句柄向量H1
    for k=1:size(H1)
        if get(H1(k),'Color')==[0 1 0]       %【0,1,0】表示绿色
            H1g=H1(k);                       %获取绿色线条句柄
        end
    end
    
    pause;              %暂停
    set(H1g,'LineStyle',':','Marker','p');     %对绿色线条进行设置。

    结果:

    image

    按下任意键

     image

    (三)图形对象测创建

    一、图形窗口对象

    1、定义

         图形窗口是MATLAB中很重要的一类图形对象。MATLAB的一切图形图像的输出都是在图形窗口中完成的。

    2、调用格式:

    句柄变量=figure(属性名1,属性值1,属性名2,属性值2);
    %属性名和属性值可以缺省,则命令如下
    句柄变量=figure  或者  figure
    
    figure(窗口句柄)       %设置为当前窗口。
                                      %如果窗口句柄写成一个整数,则可以使用这个句柄生成一个新的图形窗口,并定义为当前窗口。
    
    close(窗口句柄)        %关闭图形窗口
    close all;                     %关闭全部图形窗口
    clf;                              %清除当前图形窗口的内容,但不关闭窗口。

    3、图形窗口对象的常用属性(除了公共属性)

    (1)MenuBar属性

           取值是figure(缺省值)或none,用来控制窗口是否有菜单条。

           如果属性为none,那么用户可以使用uimenu函数来加入自己的菜单条。

           如果属性为figure,那么窗口保持默认的菜单条,这时可以采用uimenu函数在原默认的图形窗口菜单后面添加新的菜单项。

    (2)Name属性

           取值是字符串,缺省值为空,作为图形串口的标题

    (3)NumberTitle属性:

          取值是on(缺省值)或者off。决定是否以“Figure No.n:“为标题前缀,这里n是图形窗口的序号,即句柄值。

    (4)Resize属性:

          取值为on(缺省值)或off。决定在窗口对象建立后可否用鼠标改变该窗口的大小

    (5)Position属性

    (6)Units属性:

          该属性的取值可以是下列字符串的任何一种:

          pixel(像素,缺省值),normalized(相对单位),inches(英寸),centimeters(厘米)和points(磅)。

    (7)Color属性:

          取值可以用字符表示,也可以用三元组表示。缺省值为’k’即黑色。

    (8)Pointer属性:

         取值是arrow(缺省值)、crosshair、watch、topl、topr、botl、botr、circle、cross、fleur、custom等。

    (9)对键盘及鼠标响应属性:

          允许对键盘和鼠标键按下这样的动作进行响应。

    KeyPressFcn 键盘键按下响应
    WindowButtonDownFcn 鼠标键按下响应
    WindowButtonMotionFcn 鼠标盈动响应
    WindowButtonUpFcn 鼠标键释放响应

    4、一个demo

    x=linspace(0.2*pi,60);
    y=sin(x);
    hf=figure('Color',[0,1,0],'Position',[1,1,450,250],'Name','Fuck','NumberTitle','off','MenuBar','none','KeyPressFcn','plot(x,y);axis([0,2*pi,-1,1]);');

    结果:

    image

    二、坐标轴对象

    1、概念

          坐标轴对象是图形窗口对象的子对象,每个图形窗口中可以定义多个坐标轴对象,但只有一个坐标轴是当前坐标轴,在没有指明坐标轴,所有的图形图像都是在当前坐标轴中输出。

    2、调用格式

    句柄变量=axes(属性名1,属性值1,属性名2,属性值2,……);
    %调用axes函数用制动的属性在当前图形窗口创建坐标轴,并将句柄赋给句柄变量。
    
    axes  或  句柄变量=axes
    %用axes函数建立缺省坐标轴
    
    axes(坐标轴句柄)
    %调用axes函数将之设定为当前坐标轴,且坐标轴所在的图形窗口自动成为当前图形窗口。

    3、坐标轴的常用属性(除了公共属性)

    (1)Box属性:

            取值是on或者off(缺省值)。它决定坐标轴是否带有边框。

    (2)GridLineStyle属性:

            取值是‘:’(缺省值)、‘-’、‘-.’、‘--’、‘none’。该属性定义网格线的类型

    (3)Position属性:

            该属性是由四个元素构成的向量,其形式为[n1,n2,n3,n4]。这个向量在图形窗口中决定一个矩形区域,坐标轴在其中。

    (n1,n2)是左下角的坐标,(n3,n4)是矩形的宽和高。单位由Units属性决定

    (4)Unit属性:

            取值是normalized(相对单位,为缺省值)、inches(英寸)、centimeters(厘米)和points(磅)。

    (5)Title属性:

            该属性的取值是坐标轴标题文字对象的句柄,可以通过该属性对坐标轴标题文字对象进行操作。

    demo:

    ans=get(gca,'Title');
    set(ans,'Color','r');

    (6)XLabel、YLabel、ZLabel属性:

            取值分别为x,y,z轴说明文字的句柄。其操作和Title属性相同。

    demo:

    ans=get(gca,'XLabel');
    set(ans,'String','Values of X axis');

    (7)XLim、YLim、ZLim属性:

           取值都是具有2个元素的数值向量。3个属性分别定义个坐标轴的上下限。缺省为[0,1]。

    (8)XScale、YScale、ZScale属性:

           取值都是’linear’(缺省值)或’log’,这些属性定义个坐标轴的刻度类型

    (9)View属性:

           取值是两个元素的数值向量,定义视点方向。

    4、一个demo:

          PS:axes函数可以在同一个图形窗口上建立多个坐标轴(同时显示)

    clf;
    x=linspace(0.2*pi,20);
    y=sin(x);
    
    axes('Position',[0.2,0.2,0.2,0.7],'GridLineStyle','-.');
    plot(y,x);
    grid on;
    
    axes('Position',[0.4,0.2,0.5,0.5]);
    t=0:pi/100:20*pi;
    x=sin(t);
    y=cos(t);
    z=t.*sin(t).*cos(t);
    plot3(x,y,z);
    
    
    axes('Position',[0.55,0.6,0.25,0.3]);
    [x,y]=meshgrid(-8:0.5:8);
    z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps);
    mesh(x,y,z);

    image

    三、曲线对象

    1、定义

        曲线对象是坐标轴的子对象,它既可以定义二维坐标系中,也可以定义在三维坐标系中

    2、MATLAB调用:

    句柄变量=line(x,y,z,属性名1,属性值1,属性名2,属性值2,……);
    %x,y,z为三维坐标

    3、曲线对象的常用属性(除了公共属性)

    (1)Color属性:

           该属性的取值是代表某颜色的字符或者RGB值。定义曲线的颜色。

    (2)LineStyle属性:

           定义线性

    (3)LineWidth属性:

           定义线宽,缺省值为0.5磅。

    (4)Marker属性:

           定义数据点标记符号,缺省值为none

    (5)MarkerSize属性:

           定义数据点标记符号的大小,缺省值为6磅。

    (6)XData,YData,Zdata属性:

           取值都是数值向量或矩阵,分别代表曲线对象的3个坐标轴数据。

    4、一个demo

    t=0:pi/20:2*pi;
    y1=sin(t);
    y2=cos(t);
    figh=figure('Position',[30,100,800,350]);
    axes('GridLineStyle','-.','XLim',[0,2*pi],'YLim',[-1,1]);
    line('XData',t,'YData',y1,'LineWidth',2);
    line(t,y2);
    grid on;

    image

    四、文字对象

    1、用处:

         主要用于给图形添加文字标注,可以使用LaTeX文本。

    2、MATLAB调用:

    句柄变量=text(x,y,z,'说明文字',属性名1,属性值1,属性名2,属性值2,……);
    %说明文字可以使用LaTeX控制字符

    3、文字对象的其他常用属性如下:

    (1)Color属性:

            定义文字对象的颜色。

    (2)String属性:

            取值是字符串或者字符串矩阵,记录文字标注的内容。

    (3)Interpreter属性:

           取值是latex(缺省值)或none,该属性控制对文字标注内容的解释方式,即LaTeX方式或者ASCII方式、

    (4)FontSize属性:

           定义文字对象的大小,缺省值为10磅。

    (5)Rotation属性:

           取值是数值量,缺省值为0.定义文字对象的旋转角度。取正值是表示逆时针旋转。

    4、一个demo

    x=-pi:0.1:pi;
    y=sin(x);
    y1=sin(x);
    y2=cos(x);
    
    h=line(x,y1,'LineStyle',':','Color','g');
    line(x,y2,'LineStyle','--','Color','b');
    
    xlabel('-pi leq Theta leq pi');
    ylabel('sin(Theta)');
    
    title('Plot of sin(Theta)');
    
    text(-pi/4,sin(-pi/4),'leftarrow sin(-pidiv4)','FontSize',12);
    
    set(h,'Color','r','LineWidth',2);

    答案下:

    image

    五、曲面对象

    1、概念:

         曲面对象也是坐标轴的子对象,它定义在三维坐标系中,而坐标系可以在任何视点下。

    2、调用格式:

    句柄变量=surface(x,y,z,属性名1,属性值1,属性名2,属性2,……);;

    3、曲面对象的属性:

    (1)EdgeColor属性:

            取值是代表某颜色的字符或RGB值,还可以是flat、interp或者none。缺省为黑色。定义曲面网格线的颜色或着色方式

    (2)FaceColor属性:

            取值是代表某颜色的字符或RGB值,还可以是flat(缺省值),interp或none。定义曲面网格的颜色或着色方式

    (3)LineStyle属性:

            定义曲面网格线的线型

    (4)LineWidth属性:

            定义曲面网格线的线宽,缺省值为0.5磅。

    (5)Marker属性:

            曲面数据点标记符号,缺省值为none。

    (6)MarkerSize属性:

            曲面数据点标记符号的大小,缺省值为6磅。

    (7)XData,YData,ZData属性:

            3种属性的取值都是数值向量或矩阵,分别代表曲面对象的3个坐标轴数据。

    4、一个demo

    x=linspace(0,4*pi,100);
    
    [x,y]=meshgrid(x);
    z=sin(x);
    axes('view',[-37.5,30]);
    hs=surface(x,y,z,'FaceColor','w','EdgeColor','flat');
    grid on;
    
    set(get(gca,'XLabel'),'String','X-axis');      %设置x轴说明
    set(get(gca,'YLabel'),'String','Y-axis');      %设置y轴说明
    set(get(gca,'ZLabel'),'String','Z-axis');      %设置z轴说明
    
    title('mesh-surf');
    
    pause;
    
    set(hs,'FaceColor','interp','EdgeColor','interp');
    结果:

    imageimage

  • 相关阅读:
    iOS中block实现的探究
    [ES6] 19. for ... of
    [ES6] 18. Map
    [ES6] 17. Set
    [ES6] 16. Object Enhancements
    [MEAN Stack] First API -- 5. Using $resource to setup REST app
    [AngularJS] Provider
    [MEAN Stack] First API -- 4. Organize app structure
    [AngularJS] ngCloak
    [Angular-Scaled Web] 9. Control your promises with $q
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4306865.html
Copyright © 2011-2022 走看看