Wie erhalten Sie bei einem Griff einer Nebenhandlung alle zugehörigen Colorbar -Griffe?
Frage
Nehmen Sie den folgenden Code zum Beispiel:
Hsp=subplot(1,2,1);
image(rand(5,5));
Hc=colorbar;
subplot(1,2,2);
image(rand(5,6));
colorbar;
Meine Frage ist, wie man bekommt Hc
, nur gegeben Hsp
.
Wie bekannt ist, ist die Art einer Farbleiste axes
. Also habe ich versucht, alle Kinder der Nebenhandlung zu durchsuchen.
Hs=findall(Hsp,'type','axes');
Aber es gibt keinen Wert in Hs
was passt Hc
.
Lösung
Ihre Farbleisten sind Kinder der Figur, nicht Ihrer Nebenhandlächer (Farbbars sind selbst Achsen). Versuchen
hc = get(hf, 'children')
um eine Liste aller Kinder der Figur zu erhalten, wo hf
ist der Figurgriff. Ich bin mir nicht sicher, wie Sie welches Element von hc
ist gleich Ihrem Hc
, dh das ist das first
Farbbalken.
Bearbeiten:
Wenn Sie später den Griff eines Objekts verwenden müssen, ist es am besten, ihn einer Variablen zuzuweisen, wenn sie erstellt wird, und diese Variable überall zu verwenden.
Wenn Sie dies jedoch nicht tun möchten (obwohl ich das dringend empfehle), kann ich mir zwei Dinge vorstellen, die Sie tun können. Sie sind nicht besonders elegant und sind definitiv mehr Arbeit, als nur die Zuweisung Ihres Objekts einer Variablen zugewiesen wird.
Wenn Sie die Reihenfolge kennen, in der die Achsen erstellt wurden, haben Sie Glück: In der Liste, wenn Kinder erstellt wurden, ist das erste Kind das letzte Element in der Liste und das letzte Kind erstellt ist das Erste. Zum Beispiel,
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
Da Sie die erste Farbleiste möchten, die das zweite Kind erstellt wurde, können Sie dann verwenden
hc(end-2)
Alternativ setzen Sie beim Erstellen der Farbleiste, auf die Sie sich in Zukunft beziehen möchten tag
Eigentum. Ersetzen Sie im obigen Beispiel die Linie
hc1 = colorbar;
mit
hc1 = colorbar('tag', 'myID');
Sie können dann den Griff zu diesem Objekt später mit bekommen
findobj(hf, 'type', 'axes', 'tag', 'myID')
Andere Tipps
Durch die Verwendung des folgenden Skripts finden Sie den Griff aller Farbbars, die Kinder einer Achsen sind. Hier Ha1
ist der Griff der Achsen mit Bild (z. B. eine Nebenhandlung), Hc1s
sind die Griffe der Peer -Farbbars der Achsen.
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