wake-up-neo.net

Wie kann ich die Reihenfolge der Zeilen in einer Matlab-Figur ändern?

Bei einem Plot von drei Kurven in einer .fig-Datei würde ich gerne ein weiteres Plot hinzufügen (mit hold all und plot), aber füge es hinter einer der bereits vorhandenen Kurven ein (dh stelle sicher, dass die letzte Originalkurve erhalten bleibt Vordergrund eins). Kann dies erreicht werden, ohne die Plotdaten extrahieren und neu zeichnen zu müssen?

27
Tobias Kienzler

Wenn Sie den Ziehpunkt der Linie kennen, den Sie oben möchten (z. B. weil Sie h = plot(...) aufgerufen haben, können Sie UISTACK verwenden.

uistack(h,'top')

Alternativ können Sie die Reihenfolge der untergeordneten Elemente Ihrer aktuellen Achsen direkt ändern. Im Folgenden wird die letzte Kurve oben angezeigt. 

chH = get(gca,'Children')
set(gca,'Children',[chH(end);chH(1:end-1)])
42
Jonas

Die von @Jonas mit der 'Children'-Eigenschaft angegebene Auflösung funktioniert nicht in dem angegebenen Format. Es sollte wie folgt geändert werden:

chH = get(gca,'Children')
set(gca,'Children',flipud(chH))

Wenn das Bild eine Legende enthält, führt das Paar get(gca,...) und set(gca,...) zu einem Fehler: "Fehler bei der Verwendung von set . Untergeordnete Elemente können nur auf eine Permutation von sich selbst gesetzt werden" In diesem Fall habe ich das GUI-Auswahlwerkzeug verwendet Um die Achsenobjekte auszuwählen, können Sie die Arbeit nur mit den Plots und nicht mit der Legende ausführen. Nach dem Aufruf von set müssen Sie die Legende durch Aufruf von legend(...) aktualisieren. Ich hatte 5 Pläne, die ich neu ordnen musste. Wenn Sie sich bezüglich der Reihenfolge unsicher sind, plotten Sie zwei Diagramme gleichzeitig, aktualisieren Sie die Legende, und prüfen Sie, ob die gewünschte Reihenfolge vorliegt

1
Hazem

Die Children-Eigenschaft enthält die Referenzen und die Reihenfolge bestimmt den Grafikstapel.

Eine weitere Option zum Abrufen der Liste ist 

gcaChildrenList=gca.Children;

Auf diese Weise können Sie gerne mit den Bestellungen spielen

gca.Children=gca.Children([2:end 1]);         % Put the topmost graphic in the bottom
gca.Children=gca.Children([end:-1:1]);        % Flip the stack
gca.Children=gca.Children([1:N-1 N+1:end N]); % Put Nth graphics ontop the stack

Getestet mit Matlab R2014b

0
Crowley