Как сделать анимированный сюжет в Matlab

Мне было интересно, если бы кто-нибудь знал, как сделать анимационный сюжет x = (набор данных 1000 точек) y = (набор данных 1000 точек) участок (х, у)

Большая проблема - это наборы данных, которые я пытаюсь построить, или координаты x, y, а не функцию, которую я бы знал, как построить через анимацию.

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

код, который я использовал, был

for i = 1:length(DATASET1)
pause(0.1)
plot(DATASET1(i),DATASET2(i))
draw on
end

Ответ 1

Похоже, ты был близок. Не уверен, что draw on - любая команда.

Посмотрите, подсказывает ли вам код, чтобы вы решали свое дело -

%// Sample x and y values assumed for demo.
x = 1:1000;
y = x.^2;

%// Plot starts here
figure,hold on

%// Set x and y limits of the plot
xlim([min(x(:)) max(x(:))])
ylim([min(y(:)) max(y(:))])

%// Plot point by point
for k = 1:numel(x)
    plot(x(k),y(k),'-') %// Choose your own marker here

    %// MATLAB pauses for 0.001 sec before moving on to execue the next 
    %%// instruction and thus creating animation effect
    pause(0.001);     
end

Ответ 2

Если вы хотите, чтобы график "увеличивался" по точкам: самый простой способ - создать пустой сюжет, а затем обновить его свойства XData и YData на каждой итерации:

h = plot(NaN,NaN); %// initiallize plot. Get a handle to graphic object
axis([min(DATASET1) max(DATASET1) min(DATASET2) max(DATASET2)]); %// freeze axes
%// to their final size, to prevent Matlab from rescaling them dynamically 
for ii = 1:length(DATASET1)
    pause(0.01)
    set(h, 'XData', DATASET1(1:ii), 'YData', DATASET2(1:ii));
    drawnow %// you can probably remove this line, as pause already calls drawnow
end

Здесь пример 1 полученный с помощью DATASET1 = 1:100; DATASET2 = sin((1:100)/6);

enter image description here


1 Если кому-то интересно, фигура - это анимированный gif, который можно создать, добавив следующий код (взятый из здесь) в цикле после строки drawnow:

  frame = getframe(1);
  im = frame2im(frame);
  [imind,cm] = rgb2ind(im,256);
  if ii == 1;
      imwrite(imind,cm,filename,'gif','Loopcount',inf);
  else
      imwrite(imind,cm,filename,'gif','WriteMode','append');
  end

Ответ 3

Так как R2014b, вы можете работать с объектом annimatedline (doc и how-to), который предназначен для обработки анимированных графиков. В принципе, объект annimatedline имеет функцию addpoints, которая добавляет новые точки в строку без необходимости переопределять существующие точки, а также функцию clearpoints, которая очищает линии для более сложных анимаций.

Вот пример:

h = animatedline;
axis([0,4*pi,-1,1])

x = linspace(0,4*pi,1000);
y = sin(x);
for k = 1:length(x)  
    addpoints(h,x(k),y(k));
    drawnow
end