2013-07-18 2 views
0

행에 밀접하게 간격을두고 각 열에 간격을두고 배치 된 하위 플로팅을 생성해야하는 다음과 같은 함수가 있습니다.Matlab 서브 플로트가 위치 변경시 사라집니다.

function fill_graph() 
for x=1:3 
    for y=1:3 
     ax = subplot(3,3,(x-1)*3+y); 
     left_buffer = .05; 
     right_buffer = .025; 
     x_pos = left_buffer+(x-1)*(1/3*(1-left_buffer-right_buffer)); 
     width = 1/3*(1-left_buffer-right_buffer); 
     bottom_buffer = .1; 
     top_buffer = .05; 
     spacing=.07; 
     height = (1/3)*(1-2*spacing-top_buffer-bottom_buffer); 
     y_pos = bottom_buffer+(y-1)*(spacing+height); 
     set(ax,'position',[x_pos,y_pos,width,height]) 
     if x>1 
      set(gca,'yTickLabel',''); 
      ylabel(''); 
     end 
     if y>1 || x~=2 
      xlabel('') 
     end 
    end 
end 

I 함수, 플롯의 맨 아래 행이 모두 사라 중간 행의 가장 왼쪽에있는 음모를 실행하면 : 그것은 또한 당신이 가장자리에 대한 크기를 버퍼 설정할 수 있습니다.

이것은 아마도 서브 플로트가 서로 겹칠 때 사라질 것이라는 점과 관련이 있습니다. 그러나 간격을 얼마나 멀리 설정했는지에 관계없이 맨 아래 줄이 나타나지 않습니다 (내가 찾은 유일한 방법은 아래쪽 버퍼를 .34라고 설정하는 것인데, 이는 시간의 일부만 작동합니다.) 나는 그것들 중 어느 것도 겹치지 않도록해야하는 '외면'으로 '위치'를 전환하려고 시도했지만, 그 중 하나는 작동하지 않는 것으로 보인다.

나는 Second subplot disappearing을 보았습니다. 그러나 그 방식으로 위치를 지정하면 (subplot('position',x_pos,y_pos,width,height)), 이미있는 플롯 위로 씁니다. 만약 내가 그 코드 전에 배치한다면, 플롯 명령을 내리는 순간 플롯의 크기가 조정됩니다.

답변

1

subplot(....)axes()으로 바꾸어보세요.

그림에서 subplot 명령은 기존의 모든 축을 검사하여 필요한 공간 가까이에 있는지 또는 이전의 동일한 subplot 명령에 의해 생성 된 것인지 확인합니다. 귀하가 Matlab 알고리즘의이 부분을 리버스 엔지니어링 할 때 당신의 모든 시간/노력을 소비하고있는 것 같습니다.

axes 명령은 이미 존재하는 다른 축의 그림을 새 축으로 만듭니다. 예를 들어 축이 의도적으로 겹치는 그림을 작성했습니다. 모든 포지셔닝 작업을 직접 수행하는 동안에는 subplot으로 시간을 낭비하지 마십시오.

+0

훌륭한 조언. 매력처럼 일했습니다. 고맙습니다. –