2008-10-16 15 views
7

Lorsque vous tracez les choses dans Matlab, la série de données les plus récemment tracé est placé au-dessus de tout ce qui est déjà là. Par exemple:Tracer une série de données sous un autre

figure; hold on 
plot(sin(linspace(0,pi)),'linewidth',4,'color',[0 0 1]) 
plot(cos(linspace(0,pi)),'linewidth',4,'color',[1 0 0]) 

Ici, la ligne rouge est affichée au-dessus de la ligne bleue (où ils se croisent). Y at-il un moyen de définir "à quelle profondeur" une ligne est dessinée, de sorte que vous pouvez tracer les choses sous ce qui est déjà là?

Répondre

20

Utilisez la commande uistack. Par exemple:

h1 = plot(1:10, 'b'); 
hold on; 
h2 = plot(1:10, 'r'); 

tracer deux lignes avec la ligne rouge tracée en haut de la ligne bleue. Si vous faites alors:

uistack(h1); 

la ligne bleue sera mise en avant.

+0

Je ne connaissais pas uistack. C'en est une bonne! +1 –

+0

Merci, je ne connaissais pas celui-ci non plus. Et inversement, uistack (h2, 'bottom') enverra la ligne rouge vers le bas, ce qui est exactement ce que je cherche. –

+0

@Will - Bon point. Pour l'OP: Il y a d'autres arguments d'entrée à uistack qui permettent des ajustements plus sophistiqués de l'ordre d'empilement. Vous pouvez en apprendre plus à ce sujet en tapant "help uistack" sur la ligne de commande. –

4

Vous pouvez également y parvenir en définissant l'ordre du vecteur des enfants des axes actuels. Si vous procédez comme suit:

figure; hold on 
h1 = plot(sin(linspace(0,pi)),'linewidth',4,'color',[0 0 1]); 
h2 = plot(cos(linspace(0,pi)),'linewidth',4,'color',[1 0 0]); 
h = get(gca, 'Children'); 

vous verrez que h est un vecteur contenant h1 et h2. L'ordre d'empilement graphique est représenté par l'ordre des poignées dans h. Dans cet exemple, pour inverser l'ordre d'empilement, vous pouvez faire:

h = flipud(h); 
set(gca, 'Children', h); 
+0

En fin de compte, je pense qu'écrire une fonction pour le faire utilement finirait par être une ré-implémentation de uistack :) Bon point, cependant. –

+0

Cette approche s'est avérée être plusieurs ordres de grandeur plus rapide pour moi que d'utiliser uistack. Le temps d'exécution est passé de 15 minutes à moins d'une seconde. – digitalvision