2013-02-18 1 views
1

총 4 개의 독립 변수가있는 데이터 세트가 있고 4 개의 독립 변수와 하나의 종속 변수를 나타내는 유일한 방법은 3D 산란 플롯을 애니메이션화하는 것입니다.Matlab에서 움직이는 3D 산포 - 플롯

의 나는 다음과 같은 데이터 세트 있다고 가정 해 봅시다 :

W X Y Z Val 
0 0 0 0 5.5 
0 0 0 1 2.3 
0 0 1 0 1.6 
0 0 1 1 8.8 
0 1 0 0 2.6 
0 1 0 1 4.8 
0 1 1 0 0.1 
0 1 1 1 1.1 
1 0 0 0 1.0 
1 0 0 1 0.0 
1 0 1 0 0.4 
1 0 1 1 4.4 
1 1 0 0 4.4 
1 1 0 1 7.9 
1 1 1 0 9.1 
1 1 1 1 2.3 

을 그리고 값이 다음과 같은 배열에 읽어 개조되었다 :

W = {0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1} 
x = {0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1} 
X = {0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1} 
Z = {0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1} 
Val = {5.5,2.3,1.6,8.8,2.6,4.8,0.1,1.1,1.0,0.0,0.4,4.4,4.4,7.9,9.1,2.3} 

내가 어떻게 3D를 만드는 방법 궁금하네요 X, Y, Z를 독립 변수로 사용하는 scatter-plot (scatter3), 점의 색으로 표현되는 Val, 변수 W를 시간으로 움직이게하는 시간?

기본적으로 W = 0, W = 1이 당신의 편집을 기반으로 X, Y 및 Z를

+1

귀하의 질문은 무엇입니까? – bla

+0

@natan 죄송합니다. 마지막 문장을 질문했습니다. 수정했습니다. – sj755

답변

1

에 대해 서로 다른 시간에 그려 때의 발의 서로 다른 값, 나는 약간, 정제 때 내 제안 사항 : 위의 예에서

mat=cell2mat([W;x;X;Z;Val])'; %Convert cells into a matrix 

colors=prism(numel(mat(:,1))); 
scatter3(mat(1,2),mat(1,3),mat(1,4),100,colors(1,:),'filled'); 
axis tight; 

for jj=1:8:numel(mat(:,1)) 
    scatter3(mat(jj:jj+7,2),mat(jj:jj+7,3),... 
     mat(jj:jj+7,4),100,colors(jj:jj+7,:),'filled'); 
    drawnow 
    pause(1) 
end 

은 색상이 순차적으로 할당됩니다,하지만 당신은 VAL이 동일한 경우 동일하게 색상을 원하는 경우, 다음과 같이 할 수있는 :

mat=cell2mat([W;x;X;Z;Val])'; 
val_new=mat(:,5)/max(mat(:,5)); %0<VAL<1 
scatter3(mat(1,2),mat(1,3),mat(1,4),100,[0 val_new(1) 0],'filled'); 
axis tight; 

for jj=1:8:numel(mat(:,1)) 
    scatter3(mat(jj:jj+7,2),mat(jj:jj+7,3),... 
     mat(jj:jj+7,4),100,[zeros(8,1) val_new(jj:jj+7,:) zeros(8,1)],'filled'); 
    drawnow 
    pause(1) 
end 

물론이 두 예제는 항상 각 항목마다 8 개의 항목이 일관되게 있다고 가정합니다. 두 번째 경우에는 색상의 차이가 매우 미미한 경우가 있습니다. 실제로 비디오 또는 애니메이션 GIF를 저장하려면 getframeimwrite을 살펴보십시오.

+0

이것은 도움이 될 것입니다. 나는 또한 조금 더 명확하게 내 질문을 업데이 트했습니다. – sj755