web-dev-qa-db-fra.com

Comment changer l'ordre des lignes dans une figure Matlab?

Étant donné un tracé de trois courbes dans un fichier .fig, j'aimerais ajouter un autre tracé (avec hold all et plot), mais mettez-le derrière une des courbes déjà existantes (c.-à-d. Assurez-vous que la dernière courbe originale reste la au premier plan). Cela peut-il être réalisé sans avoir à extraire les données de tracé et à re-tracer?

27
Tobias Kienzler

Si vous connaissez le numéro de ligne que vous voulez en haut (par exemple parce que vous avez appelé h = plot(...), vous pouvez utiliser UISTACK

uistack(h,'top')

Vous pouvez également manipuler directement l'ordre des enfants de vos axes actuels. Ce qui suit place la dernière courbe en haut. 

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

La résolution donnée par @Jonas à l'aide de la propriété 'Children' ne fonctionne pas dans son format donné. Il devrait être modifié comme suit:

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

Lorsque l'image comporte une légende, les paires get(gca,...) et set(gca,...) entraînent une erreur: "Une erreur d'utilisation de set . Les enfants peuvent uniquement être configurés pour une permutation de lui-même" Dans ce cas, j'ai utilisé l'outil de sélection d'interface graphique de la figure pour sélectionner les objets des axes, puis obtenir et définir le travail uniquement avec les tracés comme il convient et non avec la légende. Après avoir appelé set, vous devez actualiser la légende en appelant legend(...). J'ai eu 5 parcelles que j'avais besoin de réorganiser. En cas de doute sur l'ordre, permutez les parcelles deux à la fois, actualisez la légende et voyez si c'est l'ordre que vous vouliez.

1
Hazem

La propriété Children contient les références et l'ordre détermine la pile graphique.

Une autre option pour récupérer la liste est 

gcaChildrenList=gca.Children;

De cette façon, vous pouvez jouer avec les commandes comme

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

Testé sur Matlab R2014b

0
Crowley