Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to do an animated plot in matlab

I was wondering if anyone knew how to do an animation plot of x = (dataset of 1000 points) y = (dataset of 1000 points) plot(x,y)

big problem is these are datasets that i am trying to plot , or x,y coordinates as opposed to a function which I would know how to plot via an animation.

I tried to do frames in a for loop but it gave me dots and didn't join them in a line graph so I couldn't really watch the path being traced out.

code I used was

for i = 1:length(DATASET1)
pause(0.1)
plot(DATASET1(i),DATASET2(i))
draw on
end
like image 997
branny12000 Avatar asked May 15 '14 21:05

branny12000


People also ask

How do I save an animated plot in MATLAB?

Enter the command playAnimation to play the animation. Next, save the animation in the figure fig as a GIF file named 'loop. gif' by using the writeAnimation function. The writeAnimation function always plays the animation once in a MATLAB® figure window before saving the animation.

How do you plot a moving line in MATLAB?

Create an animation by adding points to the line in a loop using the addpoints function. an = animatedline( x , y ) creates an animated line with initial data points defined by x and y . an = animatedline( x , y , z ) creates an animated line with initial data points defined by x , y , and z .

How do you replay an animation in MATLAB?

Looping PlaybackUse the Toggle Loop button in the Mechanics Explorer playback toolstrip to automatically replay an animation from the start once it reaches the end. The cached animation replays indefinitely until you click the Pause button.


2 Answers

If what you want is for the plot to "grow" point by point: the easiest way is to create an empty plot and then update its XData and YData properties at each iteration:

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

Here's an example1 obtained with DATASET1 = 1:100; DATASET2 = sin((1:100)/6);

enter image description here


1 In case someone's interested, the figure is an animated gif which can be created by adding the following code (taken from here) within the loop, after the drawnow line:

  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

like image 187
Luis Mendo Avatar answered Oct 25 '22 17:10

Luis Mendo


Looks like you were close. Not sure draw on is any command though.

See if the code here inspires you to solve your case -

%// 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
like image 9
Divakar Avatar answered Oct 25 '22 17:10

Divakar