访问属性值
对象属性和圆点表示法
图形函数返回该函数创建的一个或多个对象。例如:
h = plot(1:10);
h
引用图形中绘制的值从 1 到 10 的线条。
圆点表示法语法使用对象变量和区分大小写的属性名以圆点 (.
) 相连,组成对象圆点名称表示法:
object.PropertyName
如果对象变量是非标量,那么使用索引引用单个对象:
object(n).PropertyName
标量对象变量
如果 h
是 plot
函数创建的线条,那么 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" 索引将数据追加到包含数据数组的属性,如线条 XData
和 YData
。例如,这段代码同时更新 XData
和 YData
,以延长线条。您必须确保线条的 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
h
和 h2
引用同一个对象。复制句柄对象变量不会复制对象。
删除对象变量
工作区中有两个对象变量引用同一个线条。
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 修改属性
设置现有对象属性值的基本语法是:
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'