2013-02-18 205 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作爲獨立變量的散點圖(scatter3),用點的顏色表示的Val,以及用變量W作爲時間的相對動畫?

基本上,當瓦爾當W = 0和W = 1根據您的修改相對於在不同的時間繪製X,Y和Z

+1

和你的問題是? – bla 2013-02-18 01:37:10

+0

@natan對不起,最後一句話是個問題。做了一個編輯。 – sj755 2013-02-18 03:36:30

回答

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 2013-02-18 03:45:20