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
答
为不同的值,我稍微改进我的建议:
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动画,请查看getframe
和imwrite
。
+0
这有帮助,我需要测试这个。我也更新了我的问题,以便更清楚一点。 – sj755 2013-02-18 03:45:20
和你的问题是? – bla 2013-02-18 01:37:10
@natan对不起,最后一句话是个问题。做了一个编辑。 – sj755 2013-02-18 03:36:30