1

合計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}

X、Y、Zを独立変数、Valをドットの色で表し、変数Wを時間としてアニメーション化する3D散布図(scatter3)を作成する方法を知りたいですか?

基本的に、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つのエントリがあることを前提としています。そして2番目の例では、色の違いがごくわずかである場合があります。ビデオやアニメーションGIFを実際に保存したい場合は、とを見てgetframeくださいimwrite

于 2013-02-18T01:53:52.967 に答える