Data una maniglia di una sottotrama, come ottenere tutte le maniglie dei colorbar associate?
Domanda
Prendi il codice di seguito per esempio:
Hsp=subplot(1,2,1);
image(rand(5,5));
Hc=colorbar;
subplot(1,2,2);
image(rand(5,6));
colorbar;
La mia domanda è come ottenere Hc
, dato solo Hsp
.
Come è noto, il tipo di colorbar è axes
. Quindi ho provato a cercare tutti i bambini della sottotrama.
Hs=findall(Hsp,'type','axes');
Ma non c'è valore in Hs
che corrisponde Hc
.
Soluzione
Your colorbars are children of the figure, not of your subplot axes (colorbars are themselves axes). Try
hc = get(hf, 'children')
to get a list of all children of the figure, where hf
is the figure handle. I'm not sure how you would which element of hc
is equal to your Hc
, i.e. which is the first
colorbar.
Edit:
If you need to use an object's handle later on, it is best to assign it to a variable when it is created and to use that variable throughout.
However, if you don't want to do this (although I strongly recommend that you do) I can think of two things you can do. They are not particularly elegant and are definitely more work that just assigning your object handle to a variable.
If you know the order in which the axes were created then you are in luck: in the list if children, the first child created is the last element in the list and the last child created is the first. For example,
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
Since you want the first colorbar, which was the second child created, you can then use
hc(end-2)
Alternatively, when creating the colorbar which you want to refer to in the future, set it's tag
property. In the above example, replace the line
hc1 = colorbar;
with
hc1 = colorbar('tag', 'myID');
You can then get the handle to this object later with
findobj(hf, 'type', 'axes', 'tag', 'myID')
Altri suggerimenti
Using the following script can find the handle of all colorbars which are children of an axes. Here Ha1
is the handle of the axes with image (e.g. a subplot), Hc1s
are the handles of the peer colorbars of the axes.
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