处理图形对象
图形对象
图形对象是用于显示图形的基本元素。这些对象按层次结构组织,如下图所示。
当调用绘图函数时,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 会创建图形对象的层次结构。例如,调用 plot
函数会创建下列图形对象:
图窗 - 包含轴、工具栏、菜单等的窗口。
轴 - 包含表示数据的对象的坐标系
线条 - 代表传递至
plot
函数的数据值的线条。文本 - 用于轴刻度线和可选标题及注释的标签。
不同类型的图形使用不同对象来表示数据。由于存在许多种图形,因此也存在许多数据对象类型。其中一些用于一般用途,例如线条和矩形,还有一些是用于高度专业的用途,例如误差条、颜色栏和图例。
访问对象属性
绘图函数可返回用于创建图形的对象。例如,以下语句将创建一个图形并返回由 plot
函数创建的线条对象:
使用 h
来设置线条对象的属性。例如,设置它的 Color
属性。
此外,也可以在调用绘图函数时指定线条属性。
h = plot(x,y,'Color','red');可以查询线条属性以便查看当前值:
h.LineWidthans = 0.5000查找对象的属性
要查看对象的属性,请输入:
get(h)MATLAB 将返回包含对象属性及当前值的列表。
要查看对象属性及可能的值信息,请输入:
set(h)设置对象属性
可使用 set
函数一次设置多个属性。
设置现有对象的属性
要对多个对象的同一属性设置相同值,请使用 set
函数。
例如,下面的语句绘制一个 5×5 矩阵(创建五个线条对象,每列各一个),然后将 Marker
属性设置为正方形,并将 MarkerFaceColor
属性设置为绿色。
在本示例中,h
是一个包含五个句柄的向量,图形中的每个线条(共五个)各一个句柄。set
语句将所有线条的 Marker
和 MarkerFaceColor
属性设置为相同值。
要对一个对象设置属性值,请对句柄数组建立索引:
h(1).LineWidth = 2;设置多个属性值
如果要将每个线条的属性设置为不同值,您可以使用元胞数组存储所有数据,并将其传递给 set
命令。例如,创建绘图并保存线条句柄:
假定您要为每个线条添加不同标记,并使标记的面颜色与线条的颜色相同。您需要定义两个元胞数组,一个包含属性名,另一个包含属性所需的值。
prop_name
元胞数组包含两个元素:
prop_values
元胞数组包含 10 个值:Marker
属性有 5 个值,MarkerFaceColor
属性有 5 个值。请注意,prop_values
是一个二维元胞数组。第一个维表示值应用于 h
中的哪个句柄,第二个维表示值分配给哪个属性:
MarkerFaceColor
始终分配到相应线条的颜色的值(通过获取线条 Color
属性获得)。
定义元胞数组之后,调用 set
以便指定新属性值:
用于处理对象的函数
此表列出了处理对象时常用的函数。
函数 | 用途 |
---|---|
| 查找指定对象的所有子级。 |
| 查找图形对象的父级。 |
| 复制图形对象。 |
| 删除对象。 |
| 查找所有图形对象(包括隐藏句柄)。 |
| 查找具有指定属性值的对象的句柄。 |
| 返回当前轴的句柄。 |
| 返回当前图窗的句柄。 |
| 返回当前对象的句柄。 |
| 查询对象的属性的值。 |
| 如果值是有效对象句柄,则为 True。 |
| 设置对象的属性的值。 |
传递参数
可定义专用绘图函数以简化自定义图形的创建过程。通过定义函数,可以像 MATLAB 绘图函数一样传递参数。
下面的示例显示了一个 MATLAB 函数,该函数在输入参数 x
指定的范围中计算数学表达式,然后绘制结果。第二次调用 plot
函数会将结果的 mean
值绘制为红线。
该函数基于计算值修改 y 轴刻度。加入轴标签和标题后,即完成了图形自定义。
function plotFunc(x) y = 1.5*cos(x) + 6*ex*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 = ; new_ylab = sort([ylab, ym]); = new_ylab; title ('y = 1.5cos(x) + 6e^{-0.1x} + e^{0.07x}sin(3x)') xlabel('X Axis') ylabel('Y Axis')end定义输入参数的值,并调用此函数。
x = -10:.005:40; plotFunc(x)
查找现有对象的句柄
findobj
函数可用于通过搜索具有特定属性值的对象来获取图形对象的句柄。使用 findobj
,您可以指定任何属性组合的值,这样可以方便地从多个对象中选取一个对象。此外,findobj
还可识别正则表达式。
查找特定类型的所有对象
由于所有对象都具有标识对象类型的 Type
属性,因此可以查找特定对象类型的所有匹配项的句柄。例如,
查找所有补片对象的句柄。
查找具有特定属性的对象
您可以指定多个属性以便缩小搜索范围。例如,
plot(rand(5),'r:') h = findobj('Type','line','Color','r','LineStyle',':');查找所有红色点线的句柄。
h = 5x1 Line array: Line Line Line Line Line限制搜索范围
通过将起始图窗或轴的句柄作为传递的第一个参数,您可以在对象层次结构中指定起点。例如,
h = findobj(gca,'Type','text','String','\pi/2');仅在当前坐标区中查找 π/2。