Main Content

Buscar objetos

Buscar objetos con valores de propiedad específicos

La función findobj puede realizar una exploración de la jerarquía de objetos para obtener los identificadores de los objetos que tienen valores de propiedad específicos.

Para identificarlos, todos los objetos de gráficas tienen una propiedad Tag que puede establecer en cualquier vector de caracteres. A continuación, puede buscar el par de propiedad/valor específico. Por ejemplo, supongamos que crea una casilla de verificación que a veces se desactiva en la IU. Al asignar un valor único a la propiedad Tag, puede buscar ese objeto en particular:

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

Utilice findobj para localizar el objeto cuya propiedad Tag está configurada en 'save option y desactívelo:

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

Si no especifica un objeto de inicio, findobj realiza la búsqueda desde el objeto raíz y encuentra todas las ocurrencias de la combinación del valor nombre de propiedad/propiedad que especifique.

Para buscar objetos con identificadores ocultos, utilice findall.

Buscar texto por propiedad de cadena

Este ejemplo muestra cómo buscar objetos de texto mediante la propiedad String.

La siguiente gráfica contiene objetos de texto que etiquetan valores particulares de la función.

Supongamos que desea mover el texto que etiqueta el valor sin(t) = 0,707 de su ubicación actual en [pi/4,sin(pi/4)] al punto [3*pi/4,sin(3*pi/4)], donde la función tiene el mismo valor (aparece en gris claro fuera de la gráfica).

Determine el identificador del objeto de texto que etiqueta el punto [pi/4,sin(pi/4)] y cambie su propiedad Position.

Para utilizar findobj, seleccione un valor de propiedad que identifique únicamente al objeto. Este ejemplo utiliza la propiedad de texto String:

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

Mueva el objeto a la posición nueva, lo que define el texto Position de las unidades de los ejes.

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

findobj le permite restringir la búsqueda al especificar un punto de partida en la jerarquía, en lugar de comenzar por el objeto raíz. Si hay muchos objetos en el árbol de objetos, esta capacidad da lugar a búsquedas más rápidas. En el ejemplo anterior, sabe que el objeto de texto que le interesa se encuentra en los ejes actuales, por lo que puede escribir:

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

Utilizar expresiones regulares con findobj

Este ejemplo muestra cómo buscar identificadores de objetos con expresiones regulares para identificar valores de propiedad concretos. Para obtener más información acerca de las expresiones regulares, consulte regexp.

Suponga que crea la siguiente gráfica y que desea modificar determinadas propiedades de los objetos creados.

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';

Pasar una expresión regular a findobj permite que coincidan patrones concretos. Por ejemplo, suponga que desea definir el valor de la propiedad MarkerFaceColor en verde en todos los objetos de puntos que no tengan la propiedad Tag definida en 'Steady State' (es decir, los puntos que representan exponenciales decrecientes y crecientes).

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

Limitar el ámbito de búsqueda

Especifique el punto de inicio en el árbol de objetos para limitar el ámbito de la búsqueda. El punto de inicio puede ser el identificador de una figura, ejes o un grupo de identificadores de objetos.

Por ejemplo, suponga que desea cambiar el color de la cara del marcador de los puntos en un eje concreto:

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))

Defina el color de la cara del marcador de los puntos solo en el tercer eje.

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

Para obtener más información sobre la limitación del ámbito y la profundidad de la búsqueda de un objeto, consulte findobj y findall.