2008-10-16 9 views
7

Matlab에서 플롯하면 가장 최근에 플롯 된 데이터 시리즈가 이미 존재하는 것 위에 놓입니다. 예를 들면 다음과 같습니다.다른 하나의 데이터 시리즈 플롯

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

여기에서 빨간색 선은 파란색 선의 상단 (교차하는 곳)에 표시됩니다. 얼마나 깊이있는 선을 그릴 수있는 방법이 있습니까? 아래에 어떤 것을 그릴 수 있습니까? 이미 무엇입니까?

답변

20

uistack 명령을 사용하십시오. 예를 들면 다음과 같습니다.

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

빨간색 줄이 파란색 줄 위에 표시된 두 줄을 그립니다. 그럴 경우 :

uistack(h1); 

파란색 선이 앞쪽으로 가져옵니다.

+0

나는 uistack에 대해 몰랐습니다. 그거 좋네! +1 –

+0

고마워, 나도 이걸 몰랐어. 그리고 반대로, uistack (h2, 'bottom')은 빨간 선을 맨 아래로 보낼 것이고, 이것은 정확히 내가 한 것입니다. –

+0

@Will - 좋은 지적. OP로 : uistack에는 스택 순서를보다 정교하게 조정할 수있는 다른 입력 인수가 있습니다. 명령 줄에서 "help uistack"을 입력하여 이러한 내용을 알 수 있습니다. –

4

현재 축의 하위 벡터 순서를 설정하여이 작업을 수행 할 수도 있습니다. 다음 작업을 수행 할 경우

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

당신이 시간을 볼 수는 H1과 H2를 포함하는 벡터이다. 그래픽 스태킹 순서는 h의 핸들 순서로 표시됩니다. 이 예에서 스태킹 순서를 바꾸려면 다음을 수행하십시오.

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

결국, 나는 이것을 유용하게 수행하는 함수를 작성하는 것이 uistack의 재 구현이 될 것이라고 생각한다. 좋은 지적이다. –

+0

이 접근법은 uistack을 사용하는 것보다 몇 배 빠른 것으로 나타났습니다. 실행 시간은 15 분에서 1 초 미만으로 단축되었습니다. – digitalvision