Main Content

访问属性值

对象属性和圆点表示法

图形函数返回该函数创建的一个或多个对象。例如:

h = plot(1:10);

h 引用图形中绘制的值从 1 到 10 的线条。

圆点表示法语法使用对象变量和区分大小写的属性名以圆点 (.) 相连,组成对象圆点名称表示法:

object.PropertyName

如果对象变量是非标量,那么使用索引引用单个对象:

object(n).PropertyName

标量对象变量

如果 hplot 函数创建的线条,那么 h.Color 是特定线条的 Color 属性值:

h.Color
ans =

         0    0.4470    0.7410

如果将颜色值分配给变量:

c = h.Color;

变量 c 是双精度值。

whos
  Name      Size            Bytes  Class  

  c         1x3                24  double   
  h         1x1               112  matlab.graphics.chart.primitive.Line 

您可以使用赋值语句更改线条的 Color 属性值:

h.Color = [0 0 1];

在表达式中使用圆点表示法属性引用:

meanY = mean(h.YData);

或更改属性值:

h.LineWidth = h.LineWidth + 0.5;

使用多个圆点引用来引用属性中包含的其他对象:

h.Annotation.LegendInformation.IconDisplayStyle
ans =

on

设置属性中包含的对象属性:

ax = gca;
ax.Title.FontWeight = 'normal';

非标量对象变量

图形函数可返回对象数组。例如:

y = rand(5);
h = plot(y);
size(h)
ans =

     5     1

使用数组索引访问表示 y 中第一列的线条:

h(1).LineStyle = '--';

使用 set 函数设置数组中所有线条的 LineStyle

set(h,'LineStyle','--')

将数据追加到属性值

通过圆点表示法,您可以使用 "end" 索引将数据追加到包含数据数组的属性,如线条 XDataYData。例如,这段代码同时更新 XDataYData,以延长线条。您必须确保线条的 x 和 y 数据的大小相同,然后才能通过调用 drawnow 进行渲染或返回 MATLAB® 提示符。

h = plot(1:10);
for k = 1:5
   h.XData(end + 1) = h.XData(end) + k;
   h.YData(end + 1) = h.YData(end) + k;
   drawnow
end

图形对象变量是句柄

图形函数返回的对象变量是句柄。句柄是对实际对象的引用。对象变量是在复制时以及删除对象时具有特殊行为的句柄。

复制对象变量

例如,创建含有一个线条的图形:

h = plot(1:10);

现在将对象变量复制到另一个变量,并使用新对象变量设置属性值:

h2 = h;
h2.Color = [1,0,0]

将对象变量 h 分配给 h2 可创建句柄副本,而不是变量引用的对象。从变量 h 访问的 Color 属性值与从变量 h2 访问一样。

h.Color
ans =

     1     0     0

hh2 引用同一个对象。复制句柄对象变量不会复制对象。

删除对象变量

工作区中有两个对象变量引用同一个线条。

whos
  Name      Size            Bytes  Class                
  h         1x1               112  matlab.graphics.chart.primitive.Line
  h2        1x1               112  matlab.graphics.chart.primitive.Line

现在,关闭包含线图的图窗:

close gcf

线条对象不存在了,但引用此线条的对象变量仍然存在:

whos
  Name      Size            Bytes  Class                
  h         1x1               112  matlab.graphics.chart.primitive.Line
  h2        1x1               112  matlab.graphics.chart.primitive.Line

但此对象变量不再有效:

h.Color
Invalid or deleted object.
h2.Color = 'blue'
Invalid or deleted object.

要移除无效对象变量,使用 clear

clear h h2

列出对象属性

要查看一个对象包含哪些属性,使用 get 函数:

get(h)

MATLAB 返回对象属性及其当前值列表:

    AlignVertexCenters: 'off'
            Annotation: [1x1 matlab.graphics.eventdata.Annotation]
          BeingDeleted: 'off'
            BusyAction: 'queue'
         ButtonDownFcn: ''
              Children: []
              Clipping: 'on'
                 Color: [0 0.4470 0.7410]
...
             LineStyle: '-'
             LineWidth: 0.5000
                Marker: 'none'
...

您可以使用 set 函数查看具有一组枚举值的属性值:

set(h,'LineStyle')
    '-'
    '--'
    ':'
    '-.'
    'none'

要显示所有可设置的属性,包括具有一组枚举值的可能属性值,使用 set 和对象变量:

set(h)

使用 set 和 get 修改属性

您还可以使用 setget 函数访问以及修改属性。

设置现有对象属性值的基本语法是:

set(object,'PropertyName',NewPropertyValue)

要查询特定对象属性的当前值,使用以下形式的语句:

returned_value = get(object,'PropertyName');

属性名始终为字符向量。您可以使用单引号或字符向量形式的变量。属性值取决于特定的属性。

多对象/属性操作

如果对象参量是一个数组,那么 MATLAB 对所有识别出的对象设置特定的值。例如:

y = rand(5);
h = plot(y);

将所有线条设置为红色:

set(h,'Color','red')

要对多个对象设置相同属性,使用结构体或元胞数组指定属性名和属性值。例如,定义一个结构体,正确设置坐标区属性以显示特定图形:

view1.CameraViewAngleMode = 'manual';
view1.DataAspectRatio = [1 1 1];
view1.Projection = 'Perspective';

要在当前坐标区设置这些值,输入:

set(gca,view1)

查询多个属性

您可以定义属性名元胞数组并用它获取那些属性值。例如,假设您想要查询坐标区的 “camera mode” 属性值。首先,定义元胞数组:

camModes = {'CameraPositionMode','CameraTargetMode',...
'CameraUpVectorMode','CameraViewAngleMode'};

使用此元胞数组作为参量获取这些属性的当前值:

get(gca,camModes)
ans = 
     'auto' 'auto' 'auto' 'auto'