Matlab快速入门之图形对象的处理

4.3
(3)

本文,将带来Matlab快速入门中,图形对象的处理。图形对象是用于显示图形的基本元素。当调用绘图函数时,MATLAB® 使用各种图形对象(例如,图窗窗口、轴、线条、文本等)创建图形。每个对象都具有一组固定的属性,您可以使用这些属性控制图形的行为和外观。

Matlab快速入门之图形对象的处理

这些对象按层次结构组织,如下图所示。

Matlab快速入门之图形对象的处理

以下语句使用变量 y 中的数据创建条形图,并设置关于条形显示方式的属性:

y = [75 91 105 123.5 131 150 179 203 226 249 281.5];
bar(y,'FaceColor','green','EdgeColor','black','LineWidth',1.5)
Matlab快速入门之图形对象的处理

常见图形对象

当调用函数以便创建图形时,MATLAB 会创建图形对象的层次结构。例如,调用 plot 函数会创建下列图形对象:

  • 图窗 – 包含轴、工具栏、菜单等的窗口。
  • 轴 – 包含表示数据的对象的坐标系
  • 线条 – 代表传递至 plot 函数的数据值的线条。
  • 文本 – 用于轴刻度线和可选标题及注释的标签。

不同类型的图形使用不同对象来表示数据。由于存在许多种图形,因此也存在许多数据对象类型。其中一些用于一般用途,例如线条和矩形,还有一些是用于高度专业的用途,例如误差条、颜色栏和图例。

访问对象属性

绘图函数可返回用于创建图形的对象。例如,以下语句将创建一个图形并返回由 plot 函数创建的线条对象:

x = 1:10;
y = x.^3;
h = plot(x,y);
Matlab快速入门之图形对象的处理

使用 h 来设置线条对象的属性。例如,设置它的 Color 属性。

h.Color = 'red';
Matlab快速入门之图形对象的处理

此外,也可以在调用绘图函数时指定线条属性。

h = plot(x,y,'Color','red');

可以查询线条属性以便查看当前值:

>> h.LineWidth

ans =

    0.5000

查找对象的属性

要查看对象的属性,请输入:

>> get(h)
    AlignVertexCenters: 'off'
            Annotation: [1x1 matlab.graphics.eventdata.Annotation]
          BeingDeleted: 'off'
            BusyAction: 'queue'
         ButtonDownFcn: ''
              Children: [0x0 GraphicsPlaceholder]
              Clipping: 'on'
                 Color: [1 0 0]
             CreateFcn: ''
             DeleteFcn: ''
           DisplayName: ''
      HandleVisibility: 'on'
               HitTest: 'on'
         Interruptible: 'on'
              LineJoin: 'round'
             LineStyle: '-'
             LineWidth: 0.5000
                Marker: 'none'
       MarkerEdgeColor: 'auto'
       MarkerFaceColor: 'none'
            MarkerSize: 6
                Parent: [1x1 Axes]
         PickableParts: 'visible'
              Selected: 'off'
    SelectionHighlight: 'on'
                   Tag: ''
                  Type: 'line'
         UIContextMenu: [0x0 GraphicsPlaceholder]
              UserData: []
               Visible: 'on'
                 XData: [1 2 3 4 5 6 7 8 9 10]
             XDataMode: 'manual'
           XDataSource: ''
                 YData: [1 8 27 64 125 216 343 512 729 1000]
           YDataSource: ''
                 ZData: [1x0 double]
           ZDataSource: ''

MATLAB 将返回包含对象属性及当前值的列表。

要查看对象属性及可能的值信息,请输入:

>> set(h)
    AlignVertexCenters: {'on'  'off'}
            BusyAction: {'queue'  'cancel'}
         ButtonDownFcn: {}
              Children: {}
              Clipping: {'on'  'off'}
                 Color: {1x0 cell}
             CreateFcn: {}
             DeleteFcn: {}
           DisplayName: {}
      HandleVisibility: {'on'  'callback'  'off'}
               HitTest: {'on'  'off'}
         Interruptible: {'on'  'off'}
              LineJoin: {'chamfer'  'miter'  'round'}
             LineStyle: {'-'  '--'  ':'  '-.'  'none'}
             LineWidth: {}
                Marker: {'+'  'o'  '*'  '.'  'x'  'square'  'diamond'  'v'  '^'  '>'  '<'  'pentagram'  'hexagram'  'none'}
       MarkerEdgeColor: {'auto'  'none'}
       MarkerFaceColor: {'auto'  'none'}
            MarkerSize: {}
                Parent: {}
         PickableParts: {'visible'  'none'  'all'}
              Selected: {'on'  'off'}
    SelectionHighlight: {'on'  'off'}
                   Tag: {}
         UIContextMenu: {}
              UserData: {}
               Visible: {'on'  'off'}
                 XData: {}
             XDataMode: {'auto'  'manual'}
           XDataSource: {}
                 YData: {}
           YDataSource: {}
                 ZData: {}
           ZDataSource: {}

设置对象属性

可使用 set 函数一次设置多个属性。

设置现有对象的属性

要对多个对象的同一属性设置相同值,请使用 set 函数。

例如,下面的语句绘制一个 5×5 矩阵(创建五个线条对象,每列各一个),然后将 Marker 属性设置为正方形,并将 MarkerFaceColor 属性设置为绿色。

y = magic(5);
h = plot(y);
set(h,'Marker','s','MarkerFaceColor','g')
Matlab快速入门之图形对象的处理

在本示例中,h 是一个包含五个句柄的向量,图形中的每个线条(共五个)各一个句柄。set 语句将所有线条的 Marker 和 MarkerFaceColor 属性设置为相同值。

要对一个对象设置属性值,请对句柄数组建立索引:

h(1).LineWidth = 2;
Matlab快速入门之图形对象的处理

设置多个属性值

如果要将每个线条的属性设置为不同值,您可以使用元胞数组存储所有数据,并将其传递给 set 命令。例如,创建绘图并保存线条句柄:

figure
y = magic(5);
h = plot(y);
Matlab快速入门之图形对象的处理

假定您要为每个线条添加不同标记,并使标记的面颜色与线条的颜色相同。您需要定义两个元胞数组,一个包含属性名,另一个包含属性所需的值。

prop_name 元胞数组包含两个元素:

prop_name(1) = {'Marker'};
prop_name(2) = {'MarkerFaceColor'};

prop_values 元胞数组包含 10 个值:Marker 属性有 5 个值,MarkerFaceColor 属性有 5 个值。请注意,prop_values 是一个二维元胞数组。第一个维表示值应用于 h 中的哪个句柄,第二个维表示值分配给哪个属性:

prop_values(1,1) = {'s'};
prop_values(1,2) = {h(1).Color};
prop_values(2,1) = {'d'};
prop_values(2,2) = {h(2).Color};
prop_values(3,1) = {'o'};
prop_values(3,2) = {h(3).Color};
prop_values(4,1) = {'p'};
prop_values(4,2) = {h(4).Color};
prop_values(5,1) = {'h'};
prop_values(5,2) = {h(5).Color};

MarkerFaceColor 始终分配到相应线条的颜色的值(通过获取线条 Color 属性获得)。

定义元胞数组之后,调用 set 以便指定新属性值:

set(h,prop_name,prop_values)
Matlab快速入门之图形对象的处理

用于处理对象的函数

此表列出了处理对象时常用的函数。

函数用途
allchild查找指定对象的所有子级。
ancestor查找图形对象的前代。
copyobj复制图形对象。
delete删除对象。
findall查找所有图形对象(包括隐藏句柄)。
findobj查找具有指定属性值的对象的句柄。
gca返回当前轴的句柄。
gcf返回当前图窗的句柄。
gco返回当前对象的句柄。
get查询对象的属性的值。
ishandle如果值是有效对象句柄,则为 True。
set设置对象的属性的值。

传递参数

可定义专用绘图函数以简化自定义图形的创建过程。通过定义函数,可以像 MATLAB 绘图函数一样传递参数。

下面的示例显示了一个 MATLAB 函数,该函数在输入参数 x 指定的范围中计算数学表达式,然后绘制结果。第二次调用 plot 函数会将结果的 mean 值绘制为红线。

该函数基于计算值修改 y 轴刻度。加入轴标签和标题后,即完成了图形自定义。

function plotFunc(x)
   y = 1.5*cos(x) + 6*exp(-.1*x) + exp(.07*x).*sin(3*x);
   ym = mean(y);
   hfig = figure('Name','Function and Mean');
   hax = axes('Parent',hfig);
   plot(hax,x,y)
   hold on
   plot(hax,[min(x) max(x)],[ym ym],'Color','red')
   hold off
   ylab = hax.YTick;
   new_ylab = sort([ylab, ym]);
   hax.YTick = new_ylab;
   title ('y = 1.5cos(x) + 6e^{-0.1x} + e^{0.07x}sin(3x)')
   xlabel('X Axis')
   ylabel('Y Axis')
end

定义输入参数的值,并调用此函数。这里需要注意的是:

m文件,即上面编写的 plotFunc 函数需要放到matlab当前文件夹下。

x = -10:.005:40;
plotFunc(x)
Matlab快速入门之图形对象的处理

查找现有对象的句柄

findobj 函数可用于通过搜索具有特定属性值的对象来获取图形对象的句柄。使用 findobj,您可以指定任何属性组合的值,这样可以方便地从多个对象中选取一个对象。此外,findobj 还可识别正则表达式。

查找特定类型的所有对象

由于所有对象都具有标识对象类型的 Type 属性,因此可以查找特定对象类型的所有匹配项的句柄。例如,

h = findobj('Type','patch');

查找所有补片对象的句柄。

查找具有特定属性的对象

您可以指定多个属性以便缩小搜索范围。例如,

plot(rand(5),'r:')
h = findobj('Type','line','Color','r','LineStyle',':');

查找所有红色点线的句柄。

h = 

  5x1 Line 数组:

  Line
  Line
  Line
  Line
  Line

限制搜索范围

通过将起始图窗或轴的句柄作为传递的第一个参数,您可以在对象层次结构中指定起点。例如,

h = findobj(gca,'Type','text','String','\pi/2');

仅在当前坐标区中查找 π/2。

共计3人评分,平均4.3

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

文章目录

转载文章,原文出处:MathWorks官网,由古哥整理发布

如若转载,请注明出处:https://iymark.com/articles/3442.html

(1)
微信公众号
古哥的头像古哥管理团队
上一篇 2022年11月26日 20:10
下一篇 2022年11月27日 15:55

你可能感兴趣的文章

发表回复

登录后才能评论
微信小程序
微信公众号