Pregunta

¿Cómo puedo obtener todos los mangos de los ejes en un mango figura?

Dada la figura hf mango, me encontré con que get(hf, 'children') puede devolver los mangos de todos los ejes. Sin embargo, la ayuda de Matlab sugiere que puede volver algo más que los mangos de hachas:

  

Los niños de la figura . Un vector que contiene los mangos de todos los ejes, los objetos de interfaz de usuario visualiza dentro de la figura. Puede cambiar el orden de las asas y por lo tanto cambiar el apilamiento de los objetos en la pantalla.

¿Hay alguna manera de obtener sólo el mango de ejes en el mango figura? O, ¿cómo sé si el mango es devuelto por get(hf, 'children') mango de un hacha?

Gracias!

¿Fue útil?

Solución

FindAll :

allAxesInFigure = findall(figureHandle,'type','axes');

Si desea obtener todos los mangos de hachas en cualquier lugar en Matlab, se puede hacer lo siguiente:

allAxes = findall(0,'type','axes');

Editar

Para responder a la segunda parte de su pregunta: Puede comprobar si una lista de identificadores son ejes de conseguir la propiedad asas type:

isAxes = strcmp('axes',get(listOfHandles,'type'));

isAxes será verdad para cada mango que es de tipo axes.

Edit2

Para seleccionar sólo los ejes mangos que no son leyendas, es necesario limpiar la lista de ejes (asas ax mediante la eliminación de todos los mangos cuya etiqueta no es 'legend' o 'Colorbar':

axNoLegendsOrColorbars= ax(~ismember(get(ax,'Tag'),{'legend','Colobar'}))

Otros consejos

solución Jonas' no funcionó para mí, porque había algunos mangos que se refieren a las leyendas. Sorprendentemente, las leyendas parecen ser implementado como ejes, al menos en Matlab 2010a. Aquí es una solución si solo deseas los ejes no, las leyendas u otras cosas.

axesHandles = get(fig, 'Children');
classHandles = handle(axesHandles);
count = length(axesHandles);
isNotInstanceOfSubtype = false(1, count);
for i = 1:count
    isNotInstanceOfSubtype(i) = strcmp(class(classHandles(i)), 'axes') == 1;
end
axesHandles = axesHandles(isNotInstanceOfSubtype);

El script funciona mediante la clasificación de las manijas que revelan ser de un subtipo de ejes tipo, por ejemplo scribe.legend.

Una advertencia para aquellos que tratan de mejorar el código anterior fragmento: usando algo como

classHandles = cellfun(@(x) handle(x), axesHandles)

Puede que no funcione como se pretende:

??? Error using ==> cellfun
scribe.legend type is not currently implemented.

"Jonas" y "TM1" tienen respuestas que funcionan para algunos. Sin embargo, como se señaló TM1 el tema, hay varios elementos dentro de 'ejes' tipo.

Para referirse exactamente a la leyenda o ejes en sí (pueden existir otros artículos), es necesario diferenciarlos, utilizando sus propiedades características.

En mi ejemplo, me abrió "editor de la propiedad" y buscó diferentes propiedades de los ejes y la leyenda (ya que ambos pertenecen a "tipo, ejes"). Yo estaba tratando de copiar mis ejes y su leyenda:

copied_axes = findobj(temp_fig,'type','axes','Tag','');
copied_legend = findobj(temp_fig,'type','axes','Tag','legend');

En lugar de propiedad 'Tag', que también se podría utilizar otro propiedad del "Inspector de propiedades". La cosa es que tienen que ser diferentes. La mayor parte de sus propiedades son las mismas.

La solución por @ TM1 es excelente. El mío es un poco menos complicado (si estás bien con la programación funcional):

% initialize `fig` somehow, i.e., "fig=gcf()" for the current figure or
% "fig=get(0,'children')" for all open figures; can be vector or scalar.

ax = findall(fig, 'type', 'axes');
ax = ax(arrayfun(@(i) strcmp(class(handle(i)), 'axes'), ax));

ax contendrá sólo ejes de la trama. Esto funciona porque el class de un objeto de leyenda o barra de colores es diferente de axes.

Editar @Jonas señala una mejora potencial para filtrar los resultados de findall, porque al menos leyendas y colorbars parecen tener propiedades Tag no vacías: reemplazar la última línea en el anterior fragmento de código con

ax = ax(strcmp('', get(ax, 'Tag')))

Estas dos técnicas son kludgy y pueden romperse en el futuro (una comparación contra ggplot2 o Bokeh podría ser interesante).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top