1

我有一组总共有 4 个自变量的数据,我认为表示 4 个自变量和一个因变量的唯一方法是动画 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 散点图 (scatter3),其中 X、Y 和 Z 作为自变量,Val 由点的颜色表示,并以变量 W 作为时间进行动画处理?

基本上,当 W=0 和 W=1 时的不同 Val 值相对于 X、Y 和 Z 在不同时间绘制时。

4

1 回答 1

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

于 2013-02-18T01:53:52.967 回答