Traçar uma série de dados sob outra
Pergunta
Quando você traçar as coisas em Matlab, a série de dados mais recentemente plotado é colocado em cima de tudo o que já está lá. Por exemplo:
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])
Aqui, a linha vermelha é mostrado no topo da linha azul (onde eles se cruzam). Existe alguma maneira de definir "o quão profundo" é desenhada uma linha, para que você possa traçar as coisas abaixo o que já está aí?
Solução
Use o uistack comando. Por exemplo:
h1 = plot(1:10, 'b');
hold on;
h2 = plot(1:10, 'r');
irá traçar duas linhas com a linha vermelha traçada em cima da linha azul. Se você, em seguida, fazer:
uistack(h1);
a linha azul será trazido para a frente.
Outras dicas
Você também pode fazer isso definindo a ordem do vector crianças dos eixos correntes. Se você fazer o seguinte:
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');
Você vai ver que h é um vetor que contém H1 e H2. A ordem de empilhamento gráfica é representada pela ordem das alças em h. Neste exemplo, para inverter a ordem de empilhamento você poderia fazer:
h = flipud(h);
set(gca, 'Children', h);