Matlab中的动画3D散点图

时间:2013-02-18 00:03:00

标签: matlab animation plot scatter-plot

我有一组共有4个独立变量的数据,我认为表示4个独立变量和1个因变量的唯一方法是为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}

我想知道如何创建一个三维散点图(散射3),其中X,Y和Z作为自变量,Val由点的颜色表示,并且相对于变量W生成动画为时间?

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

1 个答案:

答案 0 :(得分: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