Comment changer l'ordre des lignes dans une figure Matlab?
Étant donné un tracé de trois courbes dans un .fichier fig je voudrais ajouter un autre tracé (avec hold all
et plot
), mais placez-le derrière l'une des courbes déjà existantes (c'est-à-dire assurez-vous que la dernière courbe originale reste au premier plan). Cela peut-il être réalisé sans avoir à extraire les données de tracé et à re-tracer?
3 réponses
Si vous connaissez le handle de la 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 met la dernière courbe sur le dessus.
chH = get(gca,'Children')
set(gca,'Children',[chH(end);chH(1:end-1)])
Lorsque l'image a une légende, la paire get(gca,...)
et set(gca,...)
entraîne une erreur: "Erreur en utilisant set. Les enfants ne peuvent être mis à une permutation de lui-même"
Dans ce cas, j'ai utilisé L'outil GUI select de la figure pour sélectionner les objets axes, puis obtenir et définir le travail uniquement avec les tracés selon les besoins et non la légende. Après avoir appelé set, vous devez actualiser la légende en appelant legend(...)
. J'avais 5 parcelles que j'avais besoin de réorganiser. En cas de doute sur l'ordre, Permute tracés deux à la fois, actualisez la légende et voyez si c'est l'ordre que vous vouliez
La résolution donnée par @ Jonas en utilisant 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))