2015-05-21 4 views
0

У меня есть набор массивов данных, которые являются nx6, где 1-й 3 столбца являются координатами x, y, z траектории и n. Я написал сценарий в MATLAB, который позволяет мне построить каждую точку в последовательности, а затем превратить его в фильм, вот код:Matlab plot3 movie, где цвет каждой точки изменяется в зависимости от произвольного вектора

% attemt to make a movie! 
test = cou{7}(:,1:3) % data arrays are stored in larger cell arrays 
numPoints = length(test(:,1)) 
x = test(:,1) 
y = test(:,2) 
z = test(:,3) 
h = figure(1) 
set(h,'Position',[100 678 560 420]) 

for j=1:numPoints 
    plot3(test(1:j,1), test(1:j,2),test(1:j,3),'kd-') 
    grid('on') 
    xlim([min(x), max(x)]) 
    ylim([min(y), max(y)]) 
    zlim([min(z), max(z)]) 

    M(j) = getframe(h); 
end 

movie(M,1,30) 
movie2avi(M,'testMovie2.avi') 

Это прекрасно работает, и я получаю фильм в формате .avi. Я получаю бриллианты, где каждая координата < x, y, z> и линия, которая соединяется со следующей точкой.

Однако мне нужно добавить разные цвета в зависимости от 5-го столбца в матрице nx6. В 5-м столбце есть числа от 0 до 8, для каждого номера требуется определенный цвет, так что каждая новая точка данных нанесена на цвет с уникальным номером в этом столбце (0 красным, 1 - синим и т. Д.).).

Из всего, что я прочитал в Интернете, кажется, что я должен закрыть один цвет или разделить точки на:

plot3(x1,y1,z1,s1,x2,y2,z2,s2, ...) 

где x1, y1, z1, s1 будет указать первую координату с ами Defining цвет, маркер и линия, x2, y2, z2, s2 - вторая точка и ее спецификации и т. д.

Предпочтительно я мог бы определить какую-то матрицу S для спецификации цвета, чтобы я мог ее добавить на участке, таком как:

plot3(x(1:j),y(1:j),z(1:j),S(1:j)) 

Все связанные записи, которые я видел до сих пор, спрашивали/отвечали с помощью другого типа 3D-графика. Точки траектории перескакивают по всему. Так что мне действительно нужен этот тип графика, чтобы иметь возможность сделать фильм!

Приветствия, Risa

P.S. Я понимаю его не самый эффективный код, и теперь, как я его написал, я могу избавиться от тестового массива. Я работаю над этим большую часть дня и развился в этом. Я просто хочу, чтобы он работал, и я отредактирую его для эффективности!

ответ

0

Возможное решение может быть:

  • определить матрицу цветовых индексов: так как вам нужно 9 цветов она должна быть (9 х 3) матрица
  • использовать значение, хранящееся в 5 столбец ваших данных, чтобы выбрать цвет в цветовой матрице (т. е. выбрать строку цветовой матрицы)
  • , чтобы установить выделенный цвет для каждой строки, соединяющей две точки, задав параметр «color» в вызове функции plot3
  • Вы c также использовать выбранный цвет для заполнения маркеры точек с помощью параметра markerfacecolor

Для этого нужно изменить индексацию данных «тест» в вашем цикле; на самом деле, как и сейчас, каждую итерацию вы нарисовываете все точки от 1 to j, пока вы должны их застроить от j to j+1.

Из-за этой модификации вы также должны добавить hold on.

Вы можете найти предлагаемое обновление в коде ниже.

ВНИМАНИЕ:

я должен был прокомментировать первую часть кода и добавить некоторые инструкции для генерации тестовых данных.

ВАЖНЕЕ

Я получил предупреждение выполняющийся последнюю строку кода, о коэффициенте сжатия и кодек.

Warning: Cannot locate Indeo5 compressor, using 'None' as the 
compression type. 

Я получил это предупреждение как при запуске вам исходный код и когда я бегу один с обновлением, поэтому он должен быть не в зависимости от модификации я сделал.

% attemt to make a movie! 
% test = cou{7}(:,1:3) % data arrays are stored in larger cell arrays 
% numPoints = length(test(:,1)) 
% x = test(:,1) 
% y = test(:,2) 
% z = test(:,3) 
% 
% Definition of example X, Y, Z points 
% 
t=0:.3:2*pi; 
x=cos(t); 
y=sin(t); 
z=(x.*y); 
test=[x' y' z']; 
numPoints = length(test) 
% 
% Definition of color indeces 
% 
test(:,5)=randi(9,numPoints,1); 

h = figure(1) 
set(h,'Position',[100 678 560 420]) 
% 
% Definiton of the set of colors 
% 
line_col=[... 
    0 0 1 
    0 1 0 
    0 1 1 
    1 0 0 
    1 0 1 
    1 .1 .3 
    .5 .5 .5 
    .3 1 .3 
    .7 .3 .9] 

for j=1:numPoints-1 
% 
% Original plot instruction 
% 
% % % plot3(test(1:j,1), test(1:j,2),test(1:j,3),'kd-') 
% 
% Updated plot instruction: 
%  remove "k" color specification 
%  specified 'color' and 'markerfacecolor' parameters 
%  modified the indexig of the "test" dataset 
% 
    a=plot3(test(j:j+1,1), test(j:j+1,2),test(j:j+1,3),'d-','color', ... 
    line_col(test(j,5)+1,:),'markerfacecolor',line_col(test(j,5)+1,:), ... 
    'linewidth',2) 
    grid('on') 
    xlim([min(x), max(x)]) 
    ylim([min(y), max(y)]) 
    zlim([min(z), max(z)]) 
% 
% Addded "hold on" instruction, needed following the modification of the 
% indexing (see comment above) 
% 
    hold on 
    M(j) = getframe(h); 
end 

movie(M,1,30) 
movie2avi(M,'testMovie2.avi') 

enter image description here

Надеется, что это помогает.

+0

Это похоже на то, что мне нужно! Спасибо! Что касается предупреждения, на моем рабочем компьютере у меня установлен R2013a, он не выдавал мне эту ошибку, когда я запускал код. Может быть, это и есть причина? – risa

+0

Я использую R2012, так что это может быть причиной предупреждения. Обратите внимание: я обновил строку кода командой 'plot3': для того, чтобы уловить случай, когда у вас есть индекс 0 в качестве индекса цвета, спецификация цвета в' plot3' должна быть 'line_col (test (j, 5) +1, :) ', то есть вам нужно« добавить 1 »к значению' test (j, 5) '. Извините, что –

+0

Да, я смог заставить его работать вчера вечером. Лично я считаю, что документация в Matlab нуждается в обновлении. Я использовал 'help plot3' в командной строке Matlab, и он устанавливает ** Различные типы линий, символы и цвета сюжета могут быть получены с помощью plot3 (X, Y, Z, s), где s - строка 1, 2 или 3 символа сделаны из символов, перечисленных в команде PLOT. plot3 (x1, y1, z1, s1, x2, y2, z2, s2, x3, y3, z3, s3, ...) объединяет графики , определяемые четырьмя точками (x, y, z, s) где x, y и z являются векторами или матрицами, а s - строками. ** но не упоминает команду «цвет»! – risa

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

  • Нет связанных вопросов^_^