Como fazer um enredo animado no matlab

Eu queria saber se alguém sabia como fazer um gráfico de animação de x = (dataset de 1000 pontos) y = (dataset de 1000 pontos) plot (x, y)

Um grande problema são os conjuntos de dados que estou tentando plotar, ou as coordenadas x, y, em oposição a uma function que eu saberia traçar por meio de uma animação.

Eu tentei fazer frameworks em um loop for, mas ele me deu pontos e não se juntou a eles em um gráfico de linhas, então eu realmente não podia ver o caminho sendo traçado.

código que usei foi

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

Parece que você estava perto. Não é certo draw on qualquer comando embora.

Veja se o código aqui inspira você a resolver seu 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 

Se o que você quer é que a plotagem cresça ponto por ponto: a maneira mais fácil é criar uma plotagem vazia e atualizar suas propriedades YData e YData em cada iteração:

 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 

Aqui está um exemplo 1 obtido com DATASET1 = 1:100; DATASET2 = sin((1:100)/6); DATASET1 = 1:100; DATASET2 = sin((1:100)/6);

insira a descrição da imagem aqui


1 Caso alguém esteja interessado, a figura é um gif animado que pode ser criado adicionando o seguinte código (tirado daqui ) dentro do loop, depois da linha 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 o R2014b, você pode trabalhar com o object annimatedline ( doc e how-to ) que serve para manipular charts animados muito bem. Basicamente, o object annimatedline possui uma function addpoints que adiciona novos pontos à linha sem precisar redefinir os pontos existentes , junto com uma function clearpoints que limpa linhas para animações mais complexas.

Aqui está um exemplo:

 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