Matlab中的动画3D散点图

Matlab中的动画3D散点图

问题描述:

我有一组数据,总共有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

为不同的值,我稍微改进我的建议:

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