Main Content

Find Objects

Find Objects with Specific Property Values

The findobj function can scan the object hierarchy to obtain the handles of objects that have specific property values.

For identification, all graphics objects have a Tag property that you can set to any character vector. You can then search for the specific property/value pair. For example, suppose that you create a check box that is sometimes inactivated in the UI. By assigning a unique value for the Tag property, you can find that particular object:

uicontrol('Style','checkbox','Tag','save option')

Use findobj to locate the object whose Tag property is set to 'save option' and disable it:

hCheckbox = findobj('Tag','save option');
hCheckbox.Enable = 'off'

If you do not specify a starting object, findobj searches from the root object, finding all occurrences of the property name/property value combination that you specify.

To find objects with hidden handles, use findall.

Find Text by String Property

This example shows how to find text objects using the String property.

The following graph contains text objects labeling particular values of the function.

Suppose that you want to move the text labeling the value sin(t) = .707 from its current location at [pi/4,sin(pi/4)] to the point [3*pi/4,sin(3*pi/4)] where the function has the same value (shown in light gray out in the graph).

Determine the handle of the text object labeling the point [pi/4,sin(pi/4)] and change its Position property.

To use findobj, pick a property value that uniquely identifies the object. This example uses the text String property:

hText = findobj('String','\leftarrowsin(t) = .707');

Move the object to the new position, defining the text Position in axes units.

hText.Position = [3*pi/4,sin(3*pi/4),0];

findobj lets you restrict the search by specifying a starting point in the hierarchy, instead of beginning with the root object. If there are many objects in the object tree, this capability results in faster searches. In the previous example, you know that the text object of interest is in the current axes, so you can type:

hText = findobj(gca,'String','\leftarrowsin(t) = .707');

Use Regular Expressions with findobj

This example shows how to find object handles using regular expressions to identify specific property values. For more information about regular expressions, see regexp.

Suppose that you create the following graph and want to modify certain properties of the objects created.

x = 0:30;
y = [1.5*cos(x);4*exp(-.1*x).*cos(x);exp(.05*x).*cos(x)]';
h = stem(x,y);
h(1).Marker = 'o';
h(1).Tag = 'Decaying Exponential';
h(2).Marker = 'square';
h(2).Tag = 'Growing Exponential';
h(3).Marker = '*';
h(3).Tag = 'Steady State';

Passing a regular expression to findobj enables you to match specific patterns. For example, suppose that you want to set the value of the MarkerFaceColor property to green on all stem objects that do not have their Tag property set to 'Steady State' (that is, stems that represent decaying and growing exponentials).

hStems = findobj('-regexp','Tag','^(?!Steady State$).');
for k = 1:length(hStems)
   hStems(k).MarkerFaceColor = 'green'
end

Limit Scope of Search

Specify the starting point in the object tree to limit the scope of the search. The starting point can be the handle of a figure, axes, or a group of object handles.

For example, suppose that you want to change the marker face color of the stems in a specific axes:

x = 0:30;
y = [1.5*cos(x);4*exp(-.1*x).*cos(x);exp(.05*x).*cos(x)]';
tiledlayout(3,1)
ax1 = nexttile;
stem(x,y(:,1))
ax2 = nexttile;
stem(x,y(:,2))
ax3 = nexttile;
stem(x,y(:,3))

Set the marker face color of the stems in the third axes only.

h = findobj(ax3,'Type','stem');
h.MarkerFaceColor = 'red';

For more information on limiting the scope and depth of an object search, see findobj and findall.