Dado un mango de una trama secundaria, ¿cómo obtener todos sus manijas de barra de color asociadas?
Pregunta
Tome el código de siguiente, por ejemplo:
Hsp=subplot(1,2,1);
image(rand(5,5));
Hc=colorbar;
subplot(1,2,2);
image(rand(5,6));
colorbar;
Mi pregunta es cómo obtener Hc
, solo dado Hsp
.
Como se sabe, el tipo de barra de color es axes
. Así que traté de buscar a todos los niños de la trama secundaria.
Hs=findall(Hsp,'type','axes');
Pero, no hay valor en Hs
que coincide Hc
.
Solución
Sus barras de color son hijos de la figura, no de sus ejes de la trama de la trama (las barras de color son ejes). Probar
hc = get(hf, 'children')
Para obtener una lista de todos los hijos de la figura, donde hf
es el mango de la figura. No estoy seguro de cómo lo harías con qué elemento de hc
es igual a tu Hc
, es decir, que es el first
barra de color.
Editar:
Si necesita usar el mango de un objeto más adelante, es mejor asignarlo a una variable cuando se crea y usar esa variable en todo momento.
Sin embargo, si no quieres hacer esto (aunque te recomiendo que lo hagas), puedo pensar en dos cosas que puedes hacer. No son particularmente elegantes y definitivamente son más trabajo que solo asignan su mango de objeto a una variable.
Si conoce el orden en que se crearon los ejes, entonces está de suerte: en la lista si los niños, el primer niño creado es el ultimo Elemento en la lista y el último niño creado es el primero. Por ejemplo,
hf = figure;
ha1 = subplot(1,2,1);
image(rand(5,5));
hc1 = colorbar;
ha2 = subplot(1,2,2);
image(rand(5,5));
hc2 = colorbar;
hcs = get(hf, 'children')
hcs =
206.0016
204.0011
176.0016
174.0011
[hc2, ha2, hc1, ha1]'
ans =
206.0016
204.0011
176.0016
174.0011
Como desea la primera barra de color, que fue el segundo niño creado, luego puede usar
hc(end-2)
Alternativamente, al crear la barra de color al que desea referirse en el futuro, establece que es tag
propiedad. En el ejemplo anterior, reemplace la línea
hc1 = colorbar;
con
hc1 = colorbar('tag', 'myID');
Luego puede obtener el mango de este objeto más tarde con
findobj(hf, 'type', 'axes', 'tag', 'myID')
Otros consejos
El uso del siguiente script puede encontrar el mango de todas las barras de color que son niños de un ejes. Aquí Ha1
es el mango de los ejes con imagen (por ejemplo, una trama secundaria), Hc1s
son las manijas de las barras de color pares de los ejes.
function Hc1s = find_peer_colorbars_of_an_axes(Ha1)
Hf = get(Ha1,'parent');
Haxs = findobj(Hf,'type','axes');
IsC=false(1,length(Haxs));
Hc1s=[];
for i=1:length(Haxs)
if isa(handle(Haxs(i)),'scribe.colorbar');
H=handle(Haxs(i));
if isequal(double(H.axes),Ha1)
Hc1s=[Hc1s,Haxs(i)];
end
end
end