There are three main ways to do sequential plot or animations:
set(h , 'XData' , y, 'YData' , y) and
animatedline. If you want your animation to be smooth, you need efficient drawing, and the three methods are not equivalent.
% Plot a sin with increasing phase shift in 500 steps x = linspace(0 , 2*pi , 100); figure tic for thetha = linspace(0 , 10*pi , 500) y = sin(x + thetha); plot(x,y) drawnow end toc
The plot function basically deletes and recreates the line object each time. A more efficient way to update a plot is to use the
YData properties of the
tic h = ; % Handle of line object for thetha = linspace(0 , 10*pi , 500) y = sin(x + thetha); if isempty(h) % If Line still does not exist, create it h = plot(x,y); else % If Line exists, update it set(h , 'YData' , y) end drawnow end toc
Now I get
2.741996 seconds, much better!
animatedline is a relatively new function, introduced in 2014b. Let's see how it fares:
tic h = animatedline; for thetha = linspace(0 , 10*pi , 500) y = sin(x + thetha); clearpoints(h) addpoints(h , x , y) drawnow end toc
3.360569 seconds, not as good as updating an existing plot, but still better than
Of course, if you have to plot a single line, like in this example, the three methods are almost equivalent and give smooth animations. But if you have more complex plots, updating existing
Line objects will make a difference.