2013-02-18 2 views
1

У меня есть набор данных с 4 независимыми переменными, и я считаю единственный способ представлять 4 независимых переменных, а одна зависимая переменная - анимировать трехмерный график рассеяния.Анимированный 3D Scatter-Plot в Matlab

Скажем, у меня есть следующий набор данных:

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 (разброс 3) с X, Y и Z как независимые переменные, Val, представленные цветами в точках, и анимировать по отношению к переменной W как время?

В основном, когда разные значения Вала для того, когда W = 0 и W = 1 построены в разное время по отношению к X, Y и Z.

+1

и на ваш вопрос? – bla

+0

@natan Извините, последнее предложение было вопросом. Сделано редактирование. – sj755

ответ

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, просто взгляните на getframe и imwrite.

+0

Это помогает, я должен проверить это. Я также обновил свой вопрос, чтобы быть немного яснее. – sj755

Смежные вопросы