Cómo hacer una ttwig animada en matlab

Me preguntaba si alguien sabía cómo hacer un diagtwig de animación de x = (conjunto de datos de 1000 puntos) y = (conjunto de datos de 1000 puntos) del diagtwig (x, y)

El gran problema es que estos son conjuntos de datos que estoy tratando de trazar, o coordenadas x, y en lugar de una función que yo sabría cómo trazar a través de una animación.

Traté de hacer fotogtwigs en un bucle for, pero me dio puntos y no los uní en un gráfico de líneas, así que no pude ver realmente el camino trazado.

el código que utilicé fue

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

Parece que estabas cerca. Sin embargo, no estoy seguro draw on haya ningún comando.

Vea si el código aquí lo inspira a resolver su caso:

 %// 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 

Si lo que quieres es que la ttwig “crezca” punto por punto: la forma más fácil es crear una gráfica vacía y luego actualizar sus propiedades XData e YData en cada iteración:

 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 

Aquí hay un ejemplo 1 obtenido con DATASET1 = 1:100; DATASET2 = sin((1:100)/6); DATASET1 = 1:100; DATASET2 = sin((1:100)/6);

enter image description here


1 En caso de que alguien esté interesado, la figura es un gif animado que puede crearse agregando el siguiente código (tomado de aquí ) dentro del ciclo, después de la línea 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 

Desde R2014b, puede trabajar con objetos annimatedline ( doc y how-to ) que están diseñados para manejar gráficos animados bastante bien. Básicamente, el objeto annimatedline tiene una función de addpoints que agrega nuevos puntos a la línea sin tener que redefinir los puntos existentes , junto con una función clearpoints que borra las líneas para animaciones más complejas.

Aquí hay un ejemplo:

 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