Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Matlab: how to save animated plot to a gif

Tags:

gif

matlab

Consider the following function that draws an animated plot of cicloid.

function animate1()
    clear, clc

    R = 1; 
    na = -pi/2; 
    t = 0:0.05:6;
    v = 4; 

    for i = 1:length(t)
        x0 = v*t(i); 
        y0 = R;
        na = -v*t(i)/R; 
        fi = linspace(na,na+2*pi,100); 
        x = x0 + R*cos(fi); 
        y = y0 + R*sin(fi);

        xc(i) = x0 + R*cos(na);
        yc(i) = y0 + R*sin(na);

        plot(x,y,'b',... 
            xc(i),yc(i),'*m',... 
            xc,yc,'r') 
        axis([-1 25 0 1.5])
        axis equal
        pause(0.01)
    end

Is it possible to modify the code in such a way that it output animated plot e.g. to a gif?

Thank you in advance!

like image 692
Eugeny89 Avatar asked Feb 09 '17 09:02

Eugeny89


Video Answer


1 Answers

Yes, imwrite does support animated GIFs. Like for AVI videos, you grab frames via getframe sequentially. Then pass them to imwrite though for GIFs you have to convert them from RGB to a 256 colormap before. Like this:

for i = 1:nFrames

    % draw stuff

    frame = getframe(gcf);
    img =  frame2im(frame);
    [img,cmap] = rgb2ind(img,256);
    if i == 1
        imwrite(img,cmap,'animation.gif','gif','LoopCount',Inf,'DelayTime',1);
    else
        imwrite(img,cmap,'animation.gif','gif','WriteMode','append','DelayTime',1);
    end
end

Have a look at openExample('matlab/WriteAnimatedGIFExample') and at doc imwrite for more information.

like image 168
Florian Avatar answered Oct 05 '22 10:10

Florian