2008-10-16 9 views
7

Cuando trazas cosas en Matlab, la serie de datos graficados más recientemente se coloca encima de lo que ya está allí. Por ejemplo:Trazar una serie de datos debajo de otra

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]) 

Aquí, la línea roja se muestra en la parte superior de la línea azul (donde se cruzan). ¿Hay alguna manera de establecer "qué tan profundo" se dibuja una línea, para que pueda trazar cosas debajo de lo que ya está allí?

Respuesta

20

Utilice el comando uistack. Por ejemplo:

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

trazará dos líneas con la línea roja graficada en la parte superior de la línea azul. Si lo hace:

uistack(h1); 

la línea azul se llevará al frente.

+0

No sabía sobre uistack. ¡Esa es buena! +1 –

+0

Gracias, yo tampoco sabía esto. Y a la inversa, uistack (h2, 'bottom') enviará la línea roja hacia abajo, que es exactamente lo que estoy buscando. –

+0

@Will - Buen punto. Para el OP: hay algunos otros argumentos de entrada para uistack que permiten ajustes más sofisticados del orden de apilamiento. Puede obtener más información escribiendo "help uistack" en la línea de comando. –

4

También puede lograr esto configurando el orden del vector hijo de los ejes actuales. Si hace lo siguiente:

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'); 

verá que h es un vector que contiene h1 y h2. El orden de apilamiento gráfico está representado por el orden de los identificadores en h. En este ejemplo, para invertir el orden de apilamiento, puede hacer lo siguiente:

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

Al final, creo que escribir una función para hacer esto útilmente terminaría siendo una reimplantación de uistack :) Sin embargo, es un buen punto. –

+0

Este enfoque resultó ser varios órdenes de magnitud más rápido para mí que usar uistack. El tiempo de ejecución pasó de 15 minutos a menos de un segundo. – digitalvision

Cuestiones relacionadas