一起来学matlab-matlab学习笔记9 高级绘图命令_1 图形对象_根对象,轴对象,用户控制对象,用户菜单对象

时间:2022-07-23
本文章向大家介绍一起来学matlab-matlab学习笔记9 高级绘图命令_1 图形对象_根对象,轴对象,用户控制对象,用户菜单对象,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

本文为matlab自学笔记的一部分,之所以学习matlab是因为其真的是人工智能无论是神经网络还是智能计算中日常使用的,非常重要的软件。也许最近其带来的一些负面消息对国内各个高校和业界影响很大。但是我们作为技术人员,更是要奋发努力,拼搏上进,学好技术,才能师夷长技以制夷,为中华之崛起而读书!

本文很多摘录自图书资料,不做任何商业用途,仅做技术分享,侵权删除!请不要放弃自己的理想和道路,加油!!

“参考书籍 《matlab 程序设计与综合应用》张德丰等著 感谢张老师的书籍,让我领略到matlab的便捷 《MATLAB技术大全》葛超等编著 感谢葛老师的书籍,让我领略到matlab的高效

图形对象

  • 图形对象(figure object):可以确定图形的整体或部分属性的各层界面。各层次图形对象是相互关联的,低层次的对象必须建立在它所在层次之上各层对象完备的基础上。
  • 每一个图形都是由不同图形对象组成的。图形对象是MATLAB提供给用户的一种用于创建计算机图形的面向对象的图形系统,该系统提供给用户创建线、字、网格、面及图形用户界面(GUI)的多种3绘图指令。前面所介绍的各种“高级"指令都是以图形对象为基础生成的,所以图形对象也称为低层图形。低层指令的调用没有高层指今那样简明清晰、通俗易懂,但是低层指令可以直接对图形的基本要素进行操作的特点决定了使用者可以让绘制的图形更加个性化、更加具有表现力。图形对象是图形系统中最基本、最底层的单元,每个图形对象都可以被独立地操作。
  • 图形对象的类型(typeoffigureobject)如下。(1)根屏幕(rootscreen):在层次的最顶层是根对象,相当于计算机屏幕,根对象只有一个,根对象不能被建立,但可以设置根属性以控制图形的显示。(2)图形窗口(figurewindow):独立于根屏幕的显示图形窗口,是根对象的子对象,而所有其他图形对象都是图形窗口的子孙。所有的绘图函数(如plot和surf等)都会自动建立一个图形窗口。(3)轴(axis):轴对象在图形窗口中定义一个区域,并确定该区域中子对象的方向,轴是图形窗口的子对象,又是图像、灯光、线、块、表面和文字的父对象。(4)控件(uicontrol):用于接口控制的按钮、列表框、滑条等,可以联合使用构成控制面板和对话框。(5)菜单(uimenu):下拉菜单,当用户选择一个独立的菜单项时执行回调程序。

通用函数

  • 使用不同样式绘制出[-pi,pi]之间的正弦和余弦曲线
x=[-pi:pi/20:pi];
y1=sin(x);
y2=cos(x);
figure(1);   % 打开图形窗口                 
subplot(2,2,1);
plot(x,y1);          
grid on; %开启网格线
title('Sin(x)');    % 加上标题          
subplot(2,2,2);
plot(x,y2,'r:');    
grid on;
title('Cos(x)');
subplot(2,2,3);
plot(x,y1,'-',x,y2,'--'); % 分别使用实线和虚线同时绘制出sin函数和cos函数
grid on;
title('Sin(x) and Cos(x)');
subplot(2,2,4);
plot(x,y1,'-',x,y1,'ko');
grid on;
title('Sin(x)');


通用函数

  • 在极坐标系中绘制极坐标曲线
    • polar(theta,rho)
    • polar(theta,rho,LineSpec)
    • polar函数可在极坐标系中绘制出曲线,并可加上极坐标栅格线,其中theta表示极坐标角度,rho表示半径,LineSpec可指定曲线的线型、颜色和标记。
t=0:.01:2*pi;
figure(1)
polar(t,sin(2*t).*cos(2*t), '--r')

根对象

  • 图形对象的基本要素以根屏幕为先导。图形对象的根(root)对应于计算机整个屏幕,根只有一个,其他所有图形对象都是根的后代。当MATLAB启动时,根对象便自动生成。根对象的属性便是其他所有MATLAB窗口的默认设置。
  • 在MATLAB中最高层次的图形对象是根对象,我们可以通过它对整个计算机屏幕进行控制。当MATLAB启动时,根对象会被自动创建,它一直存在到MATLAB关闭为止。与根对象相关的属性是应用于所用MATLAB窗口的默认属性。在根对象下,有多个图像窗口,或只有图像。每一个图像在用于显示图像数据的计算机屏幕上都有一个独立的窗口,每一个图像都有它独立的属性。与图像相关的属性有颜色、图片底色、纸张大小、纸张排列方向和指针类型等。

轴对象

  • 轴对象是图形窗口对象的子对象,坐标轴对象是图窗中实际绘图的区域。一个图形窗中可以有多个轴。每一个轴又包含线、面、方、块、字、像、光等图形对象,在句柄图形对象的结构中,它是十分重要的一环。轴对象的属性众多,主要功能为控制图像各方面信息的显示。控制坐标性质的axis函数的多种调用格式
  • axis(xmmxmaxyminymax):指定二维图形x和y轴的刻度范围,
  • axis auto:设置坐标轴为自动刻度(默认值)。
  • axis manual(或axis(axis)):保持刻度不随数据的大小而变化
  • axis tight:以数据的大小为坐标轴的范围。
  • axis ij:设置坐标轴的原点在左上角,i为纵坐标,丿为横坐标。
  • axis xy:使坐标轴回到直角坐标系
  • axise qual:使坐标轴刻度增量相同
  • axis square:使各坐标轴长度相同,但刻度增量未必相同
  • axis normal:自动调节轴与数据的外表比例,使其他设置失效。
  • axis off:使坐标轴消隐。
  • axis on:显现坐标轴 二维图形坐标轴范围在默认状态下是根据数据的大小自动设置的,如欲改变,可利用axis(xmin xmax ymin ymax)函数来定义
  • 定义坐标轴范围对观察图形的影响
x=0:0.01:pi/2;
figure(1)
plot(x,tan(x),'-yo')    % ymax=tan(1.57) ,而其他数据都很小,结果将使图形难于进行观察和判断
figure(2)
plot(x,tan(x),'-bo')
axis([0, pi/2,0,5])    % 对坐标轴的范围进行控制就可得到满意的绘图结果

用户控制对象

  • uicontrol是user interface control的缩写(用户界面控制)。在各计算机平台上,窗口系统都采用控制框和菜单,让用户进行某些操作,或设置选项或属性。控制框是图形对象,如图标、文本框和滚动条,它和菜单一起使用以建立用户图形界面,称之为窗口系统和计算机窗口管理器MATLAB控制框又称uicontrol,与窗口管理器所用的函数十分相似。它们是图形对象,可以放置在MATLAB的图形窗中的任何位置并用鼠标激活。MATLAB的uicontrol包括按钮、滑标、文本框及弹出式菜单。uicontrol由函数uicontrol生成

控制对象的创建

和创建菜单对象类似,同样可以通过基于函数命令行的编程方式和基于GUI的方式。

基于函数命令行的编程方式

使用控制对象函数uicontrol是创建控制对象的基本方法,函数的调用格式如下:

  • h=uicontrol('PropertyName1',value1,'PropertyName2',value2,...):在当前图形窗口创建一个用户控制对象,并返回一个句柄值
  • h=uicontrol(hfig,...):在特定的图形窗口创建一个用户界面控制对象。其中,h为待制作的用户界面控制对象的句柄hfig为其父对象句柄,当hfig默认时,系统将在当前图形界面上添加用户界面控制对象。

基于GUI的方式

  • 打开GUI设计工具集窗口,窗口的左侧便是各种类型的控制对象按钮栏。单击要添加的控制对象按钮,在图形窗口中拖动鼠标画出所需要的位置和大小即可。

控制对象的属性

MATLAB提供了11种控制对象,每一种控制对象对应于不同的特定目的。下面介绍这些控制对象的特征和实现的功能

  • 坐标轴(Axis):设置坐标轴控制对象。
  • 框架(Frame):该组件为一封闭的、可见的、图形窗口区域。框架能使一个用户图形界面中相关的控制组件能容易理解。框架没有相关的回调程序。只有控制组件能在框架中显示。框架不是透明的,因此用户定义的组件先后顺序决定了组件是否被框架遮住或可见。属性Stacking order决定了控制组件的显示顺序:第一个定义的组件最先显示,后面定义的控制组件则覆盖已经存在的组件。若用户要用一个框架包围一些组件,则必须第一个定义框架。
  • 校验框(check):当单击检验框时,会执行一操作。该组件对于提供用户多个独立的选择是很有用的。要激活一校验框,只需用鼠标单击该组件即可,且选中的状态在组件上显示出来。
  • 可编辑文本框(edit):允许用户输人与修改文本文字的区域。当用户想把文字作为输人时,可使用该组件。若一可编辑文本框有焦点,则单击文本框的菜单栏不会执行任何操作。因此,在单击菜单条后,语句get(edit-handle,'Strmg')并没有返回当前编辑框中的内容。因为系统必须执行回调函数来改变属性strmg的值,即使屏幕上显示的文字已经改变。
  • 列表框(list):显示一些项目的列表(用命令string设置),且允许用户选择一个或多个项目。属性Min与Max控制选择的模式。属性value显示可选择的项目与包含着字符串列表中项目的索引;对于选择了多个项目则用向量表示。在任何的能改变属性value值的、鼠标松开的操作之后,系统MATLAB将马上执行列表框的回调函数。因此,用户有必要增加一个Done按钮,用于推迟当要多次选择项目时的操作。在执行列表框回调函数Callback属性之前,列表框中项目的选择有单击或双击之分,对应于将图形窗口属性SelectionType设置为normal或openo
  • 弹出菜单(popup):当组件被按下时,打开且显示一选择列表(用命令strmg设置)。当没有打开时,该组件显示当前的选择项。
  • 普通按钮(push):当该组件被按下时,将执行一操作。要激活一个按钮,只需在按钮上按下鼠标按钮即可。
  • 单选按钮(rad10):该组件与校验框相类似,但它包含几个互斥的而且相关的选项(例如在任意时刻,只能选择一个状态)。要激活某一单选按钮,只需在该组件上按下鼠标即可。被选中的组件同时显示出来
  • 滑块(slide):该组件允许用户通过移动某一范围之内的滑块来输人一指定的数值。用户要移动一滑块,只需在滑块上按下鼠标不放,且在滑块方向上移动;或者是在滑槽内单击鼠标;或者是单击滑块条上的箭头。当松开鼠标后,滑块所在位置将与一数值对应。用户可以设置滑块的最大值、最小值与当前值等。
  • 静态文本框(text):显示文本行。静态文本经常作为其他控制对象标签,以提供其他用户相关信息,或者是显示一滑块的数值。其他用户不能交互地改变静态文本,因此对于静态文本,没有相关的回调函数。
  • 触发按钮(toggle):当该组件被单击且显示出它们的状态(on或者off)时,控制是否执行回调函数
  • gcf 返回当前Figure 对象的句柄值
  • gca 返回当前axes 对象的句柄值
  • gco 返回当前鼠标单击的句柄值,该对象可以是除root 对象外的任意图形对象,并且Matlab 会把当前图形对象的句柄值存放在Figure 的CurrentObject属性中。

用户菜单对象

MATLAB用户菜单对象是用户图形窗口的子对象,所以菜单设计总在某一个图形窗口中进行。MATLAB的图形窗口有自己的菜单栏。为了建立用户自己的菜单系统,可以先将图形窗口的,MenuBar属性设置为none,以取消图形窗口的菜单,然后建立用户自己的菜单。

建立用户菜单

用户菜单包括一级菜单(菜单条)和二级菜单,有时还可以继续建立子菜单,每一级菜单又包括若干菜单项。要建立用户菜单可用uimenu函数,因其调用方法不同,该函数可以用于建立一级菜单项和子菜单项。uimenu函数调用格式如下。

  • handle=uimenu('PropertyName',PropertyValue...):在MATLAB的当前活动窗口建立菜单对象;如果不存在当前活动窗口,MATLAB将自动打开一个图形窗口,并将该窗口作为其菜单对象
  • handle=uimenu(parent,'PropertyName',PropertyValue•••):在指定的窗口中建立菜单对象
  • 这两种调用格式的区别在于:建立一级菜单项时,要给出图形窗口的句柄值。如果省略了这个句柄值,MATLAB就在当前图形窗口中建立这个菜单项。如果此时不存在活动图形窗口,MATLAB会自动打开一个图形窗口,并将该菜单项作为它的菜单对象。在建立子菜单项时,必须指定一级菜单项对应的句柄值。快捷菜单是用鼠标右键单击对象时在屏幕上弹出的菜单。快捷菜单的位置是不固定的,而且总是附加在某个图形对象上。在MATLAB中用uicontextmenu函数创建快捷菜单,其调用格式如下:
  • handle=uicontextmenu(parent,'PropertyName',PropertyValue...):用于为快捷菜单设置属性名及属性值。

菜单对象常用属性

  • 菜单属性是菜单编程中值得注意的一个重要方面。在MATLAB中,可以通过get函数获取菜单属性的属性值,通过set函数设置菜单属性的属性值。
    • 菜单对象具有Children、Parent、Tag、Type、UserData、Visible等公共属性,除公共属性外,还有一些常用的特殊属性。
    • Accelerator属性(定义快捷键):该属性用于定义菜单项的快捷键。其取值可以是任意字母,如取字母a,则表示定义快捷键Ctrl+A。
    • Label属性:是在菜单项上显示的标注文本。可以在相应字符的前加上符号“&”为Label定义快捷键,以便使用组合键“Alt+字符”来打开相应的菜单项。
    • Callback属性:用来设置菜单项的回调程序,其内容可以是MATLAB的函数、命令和可执行的表达式,也可调用自己编写的函数。
    • Checked属性:用于设置是否在菜单项前添加选中标记,设为on表示添加,off表示不添加。
    • Enable属性:该属性用于设置菜单项是否有效。当属性值设置为off时,菜单项的标签为灰色,不可选;当属性设置为on时,菜单项可选。
    • Tag属性:该属性用于标识菜单项名称。
    • Position属性:该属性用于定义一级菜单项在菜单条上的相对位置或子菜单项在菜单组内的相对位置。其取值为数值,默认值为9。
    • BeingDeleted属性:该属性用于删除菜单项。当取值为on时,可删除菜单中的任意一项;当取值为off时,则不进行删除操作。
    • Clipping属性:该属性用于将菜单项进行剪裁
    • CreateFcn属性:该属性用于定义一个菜单对象创建阶段执行的回调程序,取值为一个字符串或函数句柄。
    • Separator属性:用于设置是否在菜单项前添加分隔线,设为on表示添加,off表示不添加。
    • Type属性:该属性用于标识图形对象的类,属性值为字符串。
    • BusyAction属性:该属性决定回调程序的中断方式,取值为cancel和Queueo如果回调程序正在执行,而用户在已经定义了回调程序的对象上触发了一个事件,新事件的回调程序将依据BusyAction的值来决定是否中断正在执行的回调程序。
    • HitTest属性:该属性决定是否将鼠标选取对象作为当前对象。当设置为on时,表示能够将鼠标选取对象作为当前对象;当设置为offü寸,CurrentObJec瞩性将返回空矩阵
    • UserData属性:该属性用于保存与菜单对象有关的信息或数据,属性值为矩阵,其默认值为[]。

制作一个带4个子菜单项的顶层菜单项,该下拉菜单分为两个功能区,每个功能区的两个菜单项是相互独立的,因此采用使能属性进行处理;当图形窗坐标轴消隐时,整个坐标分隔控制功能区不可见。

clf % 用于清除图形的命令
h_menu=uimenu('label','Option');         %产生顶层菜单项Option
h_sub1=uimenu(h_menu,'label','Axis on');%产生Axis on菜单项,由缺省设置而使能
h_sub2=uimenu(h_menu,'label','Axis off',...
   'enable','off');                          %产生Axis off菜单项,但失能
h_sub3=uimenu(h_menu,'label','Grid on',...
'separator','on','visible','on');      %产生与上分隔的Grid on菜单项,设置可见性,如果可见性是off则不可见
h_sub4=uimenu(h_menu,'label','Grid off',...
   'visible','on');                        %产生Grid off菜单项,设置可见性,如果可见性是off则不可见
clf % 用于清除图形的命令
h_menu=uimenu('label','Option');         %产生顶层菜单项Option
h_sub1=uimenu(h_menu,'label','Axis on');%产生Axis on菜单项,由缺省设置而使能
h_sub2=uimenu(h_menu,'label','Axis off',...
   'enable','off');                          %产生Axis off菜单项,但失能
h_sub3=uimenu(h_menu,'label','Grid on',...
'separator','on','visible','on');      %产生与上分隔的Grid on菜单项,设置可见性,如果可见性是off则不可见
h_sub4=uimenu(h_menu,'label','Grid off',...
   'visible','on');                        %产生Grid off菜单项,设置可见性,如果可见性是off则不可见
set(h_sub1,'callback',[...                %选中Axis on菜单项后,产生回调操作
   'axis on,',...                            %画坐标
   'set(h_sub1,''enable'',''off''),',...%Axis on菜单项失能
   'set(h_sub2,''enable'',''on''),',... %Axis off菜单项使能
   'set(h_sub3,''visible'',''on''),',...%Grid on菜单项可见
   'set(h_sub4,''visible'',''on''),']);  %Grid off菜单项可见
set(h_sub2,'callback',[...                 %选中Axis off菜单项后,产生回调操作   
   'axis off,',...                            %使坐标消失
   'set(h_sub1,''enable'',''on''),',...   %Axis on菜单项使能
   'set(h_sub2,''enable'',''off''),',...  %Axis off菜单项失能
   'set(h_sub3,''visible'',''off''),',... %Grid on菜单项不可见
   'set(h_sub4,''visible'',''off''),']);  %Grid off菜单项不可见
set(h_sub3,'callback',[...                  %选中Grid on菜单项后,产生回调
 'grid on,',...                                %画坐标分格线
 'set(h_sub3,''enable'',''off''),',...    %Grid on菜单项失能
 'set(h_sub4,''enable'',''on''),']);      %Grid off菜单项使能
set(h_sub4,'callback',[...                  %选中Grid off菜单项,产生回调
 'grid off,',...                              %消除坐标分格线
 'set(h_sub3,''enable'',''on''),',...     %Grid on菜单项使能
 'set(h_sub4,''enable'',''off''),']);     %Grid off菜单项失能