MATLAB制作绘图动画/保存视频

           MATLAB制作绘图动画/保存视频

命令有哪些:coment    二维彗星图  https://ww2.mathworks.cn/help/matlab/ref/comet.html?s_tid=srchtitle

                     coment3  三维彗星图  https://ww2.mathworks.cn/help/matlab/ref/comet3.html?s_tid=srchtitle

                     scattter    二维散点图   https://ww2.mathworks.cn/help/matlab/ref/scatter.html?s_tid=srchtitle      

                     scattter3   三维散点图   https://ww2.mathworks.cn/help/matlab/ref/scatter3.html?s_tid=srchtitle   

                     animatedline   创建动画线条    https://ww2.mathworks.cn/help/matlab/ref/animatedline.html

 好文参考:https://blog.csdn.net/zengxiantao1994/article/details/77482852   --比较全面

    getframe函数和movie函数详解:getframe函数可以捕捉动画帧,并保存到矩阵中。该函数的主要格式有:

        1、f = getframe,从当前图形框中得到动画帧;

        2、f = getframe(h),从图形句柄h中得到动画帧;

        3、f = getframe(h,rect),从图形句柄h的指定区域rect中得到动画帧。

        当创建了一系列动画帧后,可利用movie函数播放这些动画帧。该函数的主要格式有:

        1、movie(M),将矩阵M中的动画帧播放一次;

        2、movie(M, n),将矩阵M中的动画帧播放n次

        3、movie(M, n, fps),将矩阵M中的动画帧以每秒fps帧的速度播放n次。

             axis square 当前坐标系图形设置为方形,刻度范围不一定一样,但是一定是方形的。

             axis equal 将横轴纵轴的定标系数设成相同值,即单位长度相同,刻度是等长的,但不一定是方形的。

            axis manual:将坐标轴的范围锁定为当前范围。如果打开了hold on命令,则后续的图形都使用同样的坐标范围。该函数设置XLimMode、YLimMode和ZLimMode属性为manual值。

一.使用 animatedline 

参考:https://ww2.mathworks.cn/help/matlab/ref/animatedline.html

an = animatedline 创建一根没有任何数据的动画线条并将其添加到当前坐标区中。通过使用 addpoints 函数循环向线条中添加点来创建动画。

an = animatedline(x,y) 创建一根包含由 x 和 y 定义的初始数据点的动画线条。

an = animatedline(x,y,z) 创建一根包含由 xy 和 z 定义的初始数据点的动画线条。

an = animatedline(___,Name,value) 使用一个或多个名称-值对组参数指定动画线条属性。例如,'Color','r' 将线条颜色设置为红色。在前面语法中的任何输入参数组合后使用此选项。

an = animatedline(ax,___) 将在由 ax 指定的坐标区或地理坐标区中,而不是在当前坐标区 (gca) 中创建线条。选项 ax 可以位于前面的语法中的任何输入参数组合之前。

clc;close all;clear;

%%
x = 0:0.05:8*pi;
y = sin(x);
figure(1)
curve = animatedline('color','r','linestyle','-.','linewidth',2,'marker','o');%指定线条特性
set(gca,'XLim',[0,8*pi],'YLim',[-1,1]);
grid on
legend('Anmiated Sine')
for i =1:length(x)
    addpoints(curve,x(i),y(i))
drawnow end

 

加快动画绘制速度的方法:

1.使用命令:drawnow limitrate  
2.每次添加点数增多

例1:
clc;close all;clear;

%%
x = 0:0.05:8*pi;
y = sin(x);
figure(1)
curve = animatedline('color','r','linestyle','-.','linewidth',2,'marker','o');%指定线条特性
set(gca,'XLim',[0,8*pi],'YLim',[-1,1]);
grid on
legend('Anmiated Sine')
for i =1:length(x)
    addpoints(curve,x(i),y(i))
    %drawnow 
    drawnow limitrate %the command ‘limitrate' is used to speed up the plot speed
%pause(0.001) %每执行一次命令就暂停0.001s
end

  

例2:

  
clc;close all;clear;

%%
x = 0:0.05:8*pi;
y = sin(x);
figure(1)
curve = animatedline('color','r','linestyle','-.','linewidth',2,'marker','o');
set(gca,'XLim',[0,8*pi],'YLim',[-1,1]);
grid on
legend('Anmiated Sine')
for k =1:11:length(x)-10
    xvec = x(k:k+10);%一次多添加几个点
    yvec = y(k:k+10);
    addpoints(curve,xvec,yvec)
    drawnow
end 

 

控制动画速度

1.使用命令:pause(t)
2.在屏幕上绘制更新之前先运行动画循环的多个迭代,以此来控制动画速度。在 drawnow 太慢或 drawnow limitrate 太快时可以使用此技术。
例如,每 1/30 秒更新一次屏幕。使用 tic 和 toc 命令可跟踪屏幕更新间经过的时间。注:更小的时间间隔会使屏幕更新更频繁,从而产生更慢的动画。
例如,使用 b > (1/1000) 可以减慢动画速度。

例1:
clc;close all;clear;

%%
x = 0:0.05:8*pi;
y = sin(x);
figure(1)
curve = animatedline('color','r','linestyle','-.','linewidth',2,'marker','o');%指定线条特性
set(gca,'XLim',[0,8*pi],'YLim',[-1,1]);
grid on
legend('Anmiated Sine')
for i =1:length(x)
    addpoints(curve,x(i),y(i))
    pause(0.001)  %每执行一次命令就暂停0.001s
end

  


例2:
h = animatedline;
axis([0,4*pi,-1,1])
numpoints = 10000;
x = linspace(0,4*pi,numpoints);
y = sin(x);
a = tic; % start timer
for k = 1:numpoints
    addpoints(h,x(k),y(k))
    b = toc(a); % check timer
    if b > (1/30)
        drawnow % update screen every 1/30 seconds
        a = tic; % reset timer after updating
    end
end
drawnow % draw final frame

 

动画演示标记沿着线条移动。

https://ww2.mathworks.cn/help/matlab/creating_plots/trace-marker-along-line.html

使用scatter也可以实现

%动画演示标记沿着线条移动。
figure
x = linspace(0,10,1000);
y = sin(x);
plot(x,y)
hold on
p = plot(x(1),y(1),'o','MarkerFaceColor','red');
hold off
axis manual

for k = 2:length(x)
    p.XData = x(k);
    p.YData = y(k);
    drawnow
end

  

% cherrycheung
clc; close all; 
 t = 0:0.1:6*pi; 
 y = sin(t); 
 y2 = cos(t); 
 for k = 1:length(t) 
     %% marker plots  画出当前的位置
      plot(t(k),y(k),'x') 
      hold on 
      plot(t(k),y2(k),'o') 
      hold on 
     %% line plots  (每次重复画并覆盖以前的线条)
      plot(t(1:k),y(1:k)) 
      hold on 
      plot(t(1:k),y2(1:k)) 
     %% graph properties 
      axis([0 6*pi -1 1]) 
      grid on 
      xlabel('t') 
      ylabel('y') 
      legend('sin(t) marker', 'cos(t) marker', 'sin(t)', 'cos(t)') 
      pause(0.1) 
%     if k ~= length(t) %作用删除每次重复画的图保留最后一张图
% clf
% end end

  

三维的绘图效果

z = 0:0.05:10;
y = sin(2*z);
x = cos(2*z);
figure(2)
curve = animatedline('linewidth',3,'color','b');
set(gca,'XLim',[-1.5,1.5],'YLim',[-1.5,1.5],'ZLim',[0 10]);
grid on
hold on
view(43,24); % viewpiont
for i =1:length(z)
    addpoints(curve,x(i),y(i),z(i))
    head =scatter3(x(i),y(i),z(i),'filled','MarkerFaceColor','g','MarkerEdgeColor','r');
    drawnow 
  % pause(0.01)  %reduce the plotspeed 
  % delete(head);
end

 

加上delete head 的效果 

z = 0:0.05:10;
y = sin(2*z);
x = cos(2*z);
figure(2)
curve = animatedline('linewidth',3,'color','b');
set(gca,'XLim',[-1.5,1.5],'YLim',[-1.5,1.5],'ZLim',[0 10]);
grid on
hold on
view(43,24); % viewpiont
for i =1:length(z)
    addpoints(curve,x(i),y(i),z(i))
    head =scatter3(x(i),y(i),z(i),'filled','MarkerFaceColor','g','MarkerEdgeColor','r');
    drawnow 
   %pause(0.01)  %reduce the plotspeed 
    delete(head);
end

 

二 .创建视频动画 

命令:VideoWriter       详细的视频属性参考:https://ww2.mathworks.cn/help/matlab/ref/videowriter.html#d122e1351518

   v = VideoWriter(filename) 创建一个 VideoWriter 对象以将视频数据写入采用 Motion JPEG 压缩技术的 AVI 文件。

   v = VideoWriter(filename,profile) 还应用一组适合特定文件格式(例如 'MPEG-4' 或 'Uncompressed AVI')的属性。

   filename文件名;profile文件类型,默认为‘Motion JPEG AVI’

%% creating a video

z = 0:0.05:10;
y = sin(2*z);
x = cos(2*z);
figure(3)
curve = animatedline('linewidth',2,'color','b');
set(gca,'XLim',[-1.5,1.5],'YLim',[-1.5,1.5],'ZLim',[0 10]);
grid on
hold on
view(43,24); % viewpiont
% title('Melix');
% set(gcf,'Units','normalized','OuterPosition',[0 0 1 1]); % 使用更大的页面看图 ,set(gcf) 获的图片
for i =1:length(z)
    addpoints(curve,x(i),y(i),z(i))
    head =scatter3(x(i),y(i),z(i),'MarkerFaceColor','b','MarkerEdgeColor','r');
    % head =scatter3(x(i),y(i),z(i),'filled','MarkerFaceColor','b','MarkerEdgeColor','r');
    drawnow 
    F(i) = getframe(gcf);
    % pause(0.01)  %reduce the plotspeed 
    delete(head);
    title(['t = ',num2str(i)])
end

video = VideoWriter('helix.avi','Uncompressed AVI'); % 可以选'Uncompressed AVI', 或者内存更小的 'MPEG-4'也就是MP4
video.FrameRate = 60; %视频帧数
video.Quality = 90; %视频质量,默认75,取值[0,100] open(video) writeVideo(video,F); close(video)

  

不随时间旋转的情况,

%% Step 1: Generate Data
%Animate a point moving along a 3D parametric curve
t = linspace(0,2*pi,100);
x = 5*cos(t);
y = 2*sin(t);
z = t;

%% Step 2: Draw/Render Scenario
figure;
for k=1:length(t)
    %Clear the figure to start with a blank slate
    clf %clean the figure marker everytime 
    
    %Extract data at the current time step
    t_k = t(k);
    x_k = x(k);
    y_k = y(k);
    z_k = z(k);
    
    %Where is the current point?
    plot3(x_k, y_k, z_k, 'go', 'LineWidth', 3, 'MarkerSize', 15)
    
    %Plot the entire curve
    hold on
    plot3(x, y, z, 'b-', 'LineWidth', 2);
    
    %Add plotting options
    grid on
    xlabel('x')
    ylabel('y')
    zlabel('z')
    title(['t = ',num2str(t_k)])
    view([30 35])      
%% Step 3: Take a Snapshot % force Matlab to Draw the image at this point % drawnow % pause(0.01) %Save the frame movieVector(k) = getframe; %% Step 4: Advance Time %Happens automatically if using a for loop end %% Step 5: Save Movie %Create a VideoWriter object and set properties myWriter = VideoWriter('curve'); %create an .avi file % myWriter = VideoWriter('curve','MPEG-4'); %create an .mp4 file myWriter.FrameRate = 20; %Open the VideoWriter object, write the movie, and close the file open(myWriter); writeVideo(myWriter, movieVector); close(myWriter); disp('DONE!') 

随时间旋转

要对getframe的捕获图形区域进行限制,否则会出现随着时间发生变话,每张图获得的帧数不一致,为此加了这一行

figh = figure;

 movieVector(k) = getframe(figh, [10 10 520 400]);   %manually specify getframe region

%Christopher Lum
%lum@uw.edu  
%Illustrate animation in Matlab
%This file is designed to accompany the YouTube video at https://youtu.be/3I1_5M7Okqo

clear
clc
close all

%% Step 1: Generate Data
%Animate a point moving along a 3D parametric curve
t = linspace(0,2*pi,100);
x = 5*cos(t);
y = 2*sin(t);
z = t;

%% Step 2: Draw/Render Scenario
figh = figure;
for k=1:length(t)
    %Clear the figure to start with a blank slate
    clf % clean the figure marker everytime 
    
    %Extract data at the current time step
    t_k = t(k);
    x_k = x(k);
    y_k = y(k);
    z_k = z(k);
    
    %Where is the current point?
    plot3(x_k, y_k, z_k, 'go', 'LineWidth', 3, 'MarkerSize', 15)
    
    %Plot the entire curve
    hold on
    plot3(x, y, z, 'b-', 'LineWidth', 2);
    
    %Add plotting options
    grid on
    xlabel('x')
    ylabel('y')
    zlabel('z')
    title(['t = ',num2str(t_k)])
%     view([30 35])
   view([30+20*t_k 35])      %show how viewpoint can be manipulated

    %% Step 3: Take a Snapshot
    % force Matlab to Draw the image at this point
%   drawnow
%   pause(0.01)
    %Save the frame
%   movieVector(k) = getframe;
    movieVector(k) = getframe(figh, [10 10 520 400]);   %manually specify getframe region

    %% Step 4: Advance Time
    %Happens automatically if using a for loop
end

%% Step 5: Save Movie
%Create a VideoWriter object and set properties
myWriter = VideoWriter('curve');              %create an .avi file
% myWriter = VideoWriter('curve','MPEG-4');   %create an .mp4 file
myWriter.FrameRate = 20;

%Open the VideoWriter object, write the movie, and close the file
open(myWriter);
writeVideo(myWriter, movieVector);
close(myWriter);

disp('DONE!')

上述方法虽然可行,但对于大规模数据绘图来说较慢,因为他是每次重新绘图的

采用下面的方式可会绘制较快。

axes --用法参考:https://ww2.mathworks.cn/help/matlab/ref/matlab.graphics.axis.axes-properties.html

                            https://ww2.mathworks.cn/help/matlab/ref/axes.html?s_tid=srchtitle

                            https://www.cnblogs.com/stxs/p/8721348.html

%% 这个方法运行更快,因为只是每次刷新数据而已,不再每次重新画图
tic %计时
t = linspace(0,6*pi,100);
x = 5*cos(t);
y = 2*sin(t);
z = t;
figh =figure
ax = axes(figh,'XGrid','on','YGrid','on','Position',[0.1 0.1 0.8 0.8],'Box','on')
plot3(ax,x, y, z, 'b-', 'LineWidth', 2);           %plot the curve outside the loop only once
hold on
Plot1 = plot3(ax, 0, 0, 0,'go', 'LineWidth', 3, 'MarkerSize', 15);                           %initialize empty plot;
for k=1:length(t)
   
    %Extract data at the current time step
    t_k = t(k);
    x_k = x(k);
    y_k = y(k);
    z_k = z(k);
    Plot1.XData = x_k;  % refresh just the X Y Z data inside the loop (way quicker than reinitializing a whole new plot each time)
    Plot1.YData = y_k;
    Plot1.ZData = z_k;
    drawnow
end
toc

  

close all;clc;clear;
axis tight equal 
%axis equal 沿每个坐标轴使用相同的数据单位长度
%axis tight 将坐标轴范围设置为等同于数据范围,使轴框紧密围绕数据
v = VideoWriter('exp3dVideo.avi'); %先创建一个空文件
open(v);
[x,y] = meshgrid(-10:0.5:10, -10:0.5:10);
r  = sqrt(x.^2+y.^2);
for k = 0:200
    z = cos(r/2+k/10).*exp(-r.^2/50);
    surf(x,y,z);
    xlim([-10,10]);
    ylim([-10,10]);
    zlim([-1,1]);
    frame = getframe(gcf);
    writeVideo(v,frame);
end

close(v);

  动态视频--但无法插入

三.创建GIF文件

命令:rgb2ind 将 RGB 图像转换为索引图像   https://ww2.mathworks.cn/help/matlab/ref/rgb2ind.html?s_tid=srchtitle

           imwrite 将图像写入图形文件                https://ww2.mathworks.cn/help/matlab/ref/imwrite.html?s_tid=srchtitle#btv3cny-5

           

z = 0:0.05:10;
y = sin(2*z);
x = cos(2*z);
figure(2)
curve = animatedline('linewidth',3,'color','b');
set(gca,'XLim',[-1.5,1.5],'YLim',[-1.5,1.5],'ZLim',[0 10]);
grid on
hold on
view(43,24); % viewpiont
for i =1:length(z)
    addpoints(curve,x(i),y(i),z(i))
    head =scatter3(x(i),y(i),z(i),'filled','MarkerFaceColor','g','MarkerEdgeColor','r');
    drawnow 
  % pause(0.01)  %reduce the plotspeed 
    
     %下面是用来画出GIF动画的
     frame = getframe;
     fm{i} = frame2im(frame);
     filename = 'test8_sin(x).gif'; %文件名称
    [A,map] = rgb2ind(fm{i},256);
    if i == 1
       imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',1);
    else
        imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',1);
        delete(head);
    end
end

  

参考这个:没有这个语句,注意两个区别,并且用的是花括号引用的

fm{i} = frame2im(frame);
clear;clc;
[x,y]=meshgrid(-8:.1:8);
for j=1:10
f=@(x,y)(sin(sqrt((11-j)*(x.^bai2+y.^2)))./sqrt((11-j)*(x.^2+y.^2)+eps));
z=f(x,y);
surf(x,y,z);shading interp;
M(j) = getframe; if j==1 [I,map]=rgb2ind(M(j).cdata,256); imwrite(I,map,'out.gif','DelayTime',.1) else imwrite(rgb2ind(M(j).cdata,map),map,'out.gif','WriteMode','append','DelayTime',.1) end end VideoWriter(M,'out.avi')

  

 前面画图的

clc;close all;clear;
%%
x = 0:0.05:20*pi;
y = sin(x);
figure(1)
curve = animatedline('color','r','linestyle','-.','linewidth',2,'marker','o');
set(gca,'XLim',[0,20*pi],'YLim',[-1,1]);
grid on
legend('Anmiated Sine')
for i =1:length(x)
   
    addpoints(curve,x(i),y(i))
%   drawnow limitrate %the command ‘limitrate' is used to speed up the plot speed
    pause(0.01)  %reduce the plotspeed 
end

%% 3D plot
z = 0:0.05:10;
y = sin(2*z);
x = cos(2*z);
figure(2)
curve = animatedline('linewidth',3,'color','b');
set(gca,'XLim',[-1.5,1.5],'YLim',[-1.5,1.5],'ZLim',[0 10]);
grid on
hold on
view(43,24); % viewpiont
for i =1:length(z)
    addpoints(curve,x(i),y(i),z(i))
    head =scatter3(x(i),y(i),z(i),'filled','MarkerFaceColor','g','MarkerEdgeColor','r');
    drawnow 
  % pause(0.01)  %reduce the plotspeed 
  % delete(head);
end

%%
x = 0:0.05:20*pi;
y = sin(x);
figure
curve = animatedline('color','r','linestyle','-.','linewidth',2,'marker','o');
set(gca,'XLim',[0,20*pi],'YLim',[-1,1]);
grid on
legend('Anmiated Sine')
for k =1:11:length(x)-10
    xvec = x(k:k+10);
    yvec = y(k:k+10);
    addpoints(curve,xvec,yvec)
    drawnow
end
%}
%% creating a video

z = 0:0.05:10;
y = sin(2*z);
x = cos(2*z);
figure
curve = animatedline('linewidth',2,'color','b');
set(gca,'XLim',[-1.5,1.5],'YLim',[-1.5,1.5],'ZLim',[0 10]);
grid on
hold on
view(43,24); % viewpiont
% title('Melix');
% set(gcf,'Units','normalized','OuterPosition',[0 0 1 1]); % using larger view figure ,set(gcf) 获得图片
for i =1:length(z)
    addpoints(curve,x(i),y(i),z(i))
    head =scatter3(x(i),y(i),z(i),'MarkerFaceColor','b','MarkerEdgeColor','r');
    % head =scatter3(x(i),y(i),z(i),'filled','MarkerFaceColor','b','MarkerEdgeColor','r');
    drawnow 
    F(i) = getframe(gcf);
    % pause(0.01)  %reduce the plotspeed 
    delete(head);
    title(['t = ',num2str(i)])
end
video = VideoWriter('helix.avi');
% video = VideoWriter('helix.avi','Uncompressed AVI'); % 'Uncompressed AVI', you can chose other video type with smaller size such as 'MPEG-4'
video.FrameRate = 60;
video.Quality = 90;%视频质量,默认75,取值[0,100]
open(video)
writeVideo(video,F);
close(video)


%% Creating Movies and Animation in matlab
%Christopher Lum
%lum@uw.edu  
%Illustrate animation in Matlab
%This file is designed to accompany the YouTube video at https://youtu.be/3I1_5M7Okqo

clear
clc
close all

%% Step 1: Generate Data
%Animate a point moving along a 3D parametric curve
t = linspace(0,2*pi,100);
x = 5*cos(t);
y = 2*sin(t);
z = t;

%% Step 2: Draw/Render Scenario
figh = figure;
for k=1:length(t)
    %Clear the figure to start with a blank slate
    clf % clean the figure marker everytime 
    
    %Extract data at the current time step
    t_k = t(k);
    x_k = x(k);
    y_k = y(k);
    z_k = z(k);
    
    %Where is the current point?
    plot3(x_k, y_k, z_k, 'go', 'LineWidth', 3, 'MarkerSize', 15)
    
    %Plot the entire curve
    hold on
    plot3(x, y, z, 'b-', 'LineWidth', 2);
    
    %Add plotting options
    grid on
    xlabel('x')
    ylabel('y')
    zlabel('z')
    title(['t = ',num2str(t_k)])
%     view([30 35])
   view([30+20*t_k 35])      %show how viewpoint can be manipulated

    %% Step 3: Take a Snapshot
    %   force Matlab to Draw the image at this point
%   drawnow
%   pause(0.01)
    %Save the frame
%   movieVector(k) = getframe;
    movieVector(k) = getframe(figh, [10 10 520 400]);   %manually specify getframe region

    %% Step 4: Advance Time
    %Happens automatically if using a for loop
end

%% Step 5: Save Movie
%Create a VideoWriter object and set properties
myWriter = VideoWriter('curve');              %create an .avi file
% myWriter = VideoWriter('curve','MPEG-4');   %create an .mp4 file
myWriter.FrameRate = 20;

%Open the VideoWriter object, write the movie, and close the file
open(myWriter);
writeVideo(myWriter, movieVector);
close(myWriter);

disp('DONE!')


%% Step 1: Generate Data  没有旋转的
%Animate a point moving along a 3D parametric curve
t = linspace(0,2*pi,100);
x = 5*cos(t);
y = 2*sin(t);
z = t;

%% Step 2: Draw/Render Scenario
figure;
for k=1:length(t)
    %Clear the figure to start with a blank slate
    clf %clean the figure marker everytime 
    
    %Extract data at the current time step
    t_k = t(k);
    x_k = x(k);
    y_k = y(k);
    z_k = z(k);
    
    %Where is the current point?
    plot3(x_k, y_k, z_k, 'go', 'LineWidth', 3, 'MarkerSize', 15)
    
    %Plot the entire curve
    hold on
    plot3(x, y, z, 'b-', 'LineWidth', 2);
    
    %Add plotting options
    grid on
    xlabel('x')
    ylabel('y')
    zlabel('z')
    title(['t = ',num2str(t_k)])
%   view([30 35])
    view([30 35])      

    %% Step 3: Take a Snapshot
    %   force Matlab to Draw the image at this point
%   drawnow
%   pause(0.01)
    %Save the frame
    movieVector(k) = getframe;
    

    %% Step 4: Advance Time
    %Happens automatically if using a for loop
end

%% Step 5: Save Movie
%Create a VideoWriter object and set properties
myWriter = VideoWriter('curve2');              %create an .avi file
% myWriter = VideoWriter('curve','MPEG-4');   %create an .mp4 file
myWriter.FrameRate = 20;

%Open the VideoWriter object, write the movie, and close the file
open(myWriter);
writeVideo(myWriter, movieVector);
close(myWriter);
disp('DONE!')

%{
clear;clc;
[x,y]=meshgrid(-8:0.1:8);
for j=1:10
f=@(x,y)(sin(sqrt((11-j)*(x.^2+y.^2)))./sqrt((11-j)*(x.^2+y.^2)+eps));
z=f(x,y);
surf(x,y,z);shading interp;
M(j) = getframe;
if j==1
   [I,map]=rgb2ind(M(j).cdata,256);
   imwrite(I,map,'out.gif','DelayTime',0.1)
else
     imwrite(rgb2ind(M(j).cdata,map),map,'out.gif','WriteMode','append','DelayTime',0.1)
  end
end
VideoWriter(M,'out.avi')
%} 

 上述画GIF的代码:

clc;close all;clear;
%%
x = 0:0.05:8*pi;
y = sin(x);
fig = figure(1)
curve = animatedline('color','r','linestyle','-.','linewidth',2,'marker','o');%指定线条特性
set(gca,'XLim',[0,8*pi],'YLim',[-1,1]);
grid on
legend('Anmiated Sine')
for i =1:length(x)
    addpoints(curve,x(i),y(i))
    drawnow 
    %下面是用来画出GIF动画的
     frame = getframe(fig);
     fm{i} = frame2im(frame);
     filename = 'test1_sin(x).gif'; %文件名称
    [A,map] = rgb2ind(fm{i},256);
    if i == 1
        imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',1);
    else
        imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',1);
    end
end


x = 0:0.05:8*pi;
y = sin(x);
figure(2)
curve = animatedline('color','r','linestyle','-.','linewidth',2,'marker','o');%指定线条特性
set(gca,'XLim',[0,8*pi],'YLim',[-1,1]);
grid on
legend('Anmiated Sine')
for i =1:length(x)
    addpoints(curve,x(i),y(i))
    %drawnow 
    drawnow limitrate %the command ‘limitrate' is used to speed up the plot speed
    %pause(0.001)  %每执行一次命令就暂停0.001s
    %下面是用来画出GIF动画的
    frame = getframe;
     fm{i} = frame2im(frame);
     filename = 'test2_sin(x).gif'; %文件名称
    [A,map] = rgb2ind(fm{i},256);
    if i == 1
        imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',1);
    else
        imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',1);
    end
end


x = 0:0.05:8*pi;
y = sin(x);
figure(3)
curve = animatedline('color','r','linestyle','-.','linewidth',2,'marker','o');
set(gca,'XLim',[0,8*pi],'YLim',[-1,1]);
grid on
legend('Anmiated Sine')
for k =1:11:length(x)-10
    xvec = x(k:k+10);%一次多添加几个点
    yvec = y(k:k+10);
    addpoints(curve,xvec,yvec)
    drawnow
    %下面是用来画出GIF动画的
     frame = getframe;
     fm{k} = frame2im(frame);
     filename = 'test3_sin(x).gif'; %文件名称
    [A,map] = rgb2ind(fm{k},256);
    if k == 1
        imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',1);
    else
        imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',1);
    end
end


x = 0:0.05:8*pi;
y = sin(x);
figure(4)
curve = animatedline('color','r','linestyle','-.','linewidth',2,'marker','o');%指定线条特性
set(gca,'XLim',[0,8*pi],'YLim',[-1,1]);
grid on
legend('Anmiated Sine')
for i =1:length(x)
    addpoints(curve,x(i),y(i))
    pause(0.001)  %每执行一次命令就暂停0.001s
    %下面是用来画出GIF动画的
      frame = getframe;
     fm{i} = frame2im(frame);
     filename = 'test4_sin(x).gif'; %文件名称
    [A,map] = rgb2ind(fm{i},256);
    if i == 1
        imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',1);
    else
        imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',1);
    end
end


h = animatedline;
axis([0,2*pi,-1,1])
numpoints = 10000;
x = linspace(0,2*pi,numpoints);
y = sin(x);
a = tic; % 启动计时
for k = 1:numpoints
    addpoints(h,x(k),y(k))
    b = toc(a); % 查看时间
    if b > (1/10)
        drawnow  % 每1/10 seconds刷新一次图像,更新时间越短,动画越慢
        a = tic; % 每次更新后重置计时器
    end
   
    %下面是用来画出GIF动画的
      frame = getframe;
     fm{k} = frame2im(frame);
     filename = 'test5_sin(x).gif'; %文件名称
    [A,map] = rgb2ind(fm{k},256);
    if k == 1
        imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',1);
    else
        imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',1);
    end
    
end
drawnow % 画出最后一帧图像


%% 3D plot
z = 0:0.05:10;
y = sin(2*z);
x = cos(2*z);
figure(2)
curve = animatedline('linewidth',3,'color','b');
set(gca,'XLim',[-1.5,1.5],'YLim',[-1.5,1.5],'ZLim',[0 10]);
grid on
hold on
view(43,24); % viewpiont
for i =1:length(z)
    addpoints(curve,x(i),y(i),z(i))
    head =scatter3(x(i),y(i),z(i),'filled','MarkerFaceColor','g','MarkerEdgeColor','r');
    drawnow 
  % pause(0.01)  %reduce the plotspeed 
 
   %下面是用来画出GIF动画的
      frame = getframe;
     fm{i} = frame2im(frame);
     filename = 'test6_sin(x).gif'; %文件名称
    [A,map] = rgb2ind(fm{i},256);
    if i == 1
        imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',1);
    else
        imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',1);
    end
end

%}

z = 0:0.05:10;
y = sin(2*z);
x = cos(2*z);
figure(2)
curve = animatedline('linewidth',3,'color','b');
set(gca,'XLim',[-1.5,1.5],'YLim',[-1.5,1.5],'ZLim',[0 10]);
grid on
hold on
view(43,24); % viewpiont
for i =1:length(z)
    addpoints(curve,x(i),y(i),z(i))
    head =scatter3(x(i),y(i),z(i),'filled','MarkerFaceColor','g','MarkerEdgeColor','r');
    drawnow 
  % pause(0.01)  %reduce the plotspeed 
    
     %下面是用来画出GIF动画的
      frame = getframe;
     fm{i} = frame2im(frame);
     filename = 'test8_sin(x).gif'; %文件名称
    [A,map] = rgb2ind(fm{i},256);
    if i == 1
       imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',1);
    else
        imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',1);
        delete(head);
    end
end


x = 0:0.01:1;
n = 3;
y = x.^n;
plot(x,y,'LineWidth',3)
title(['y = x^n,  n = ' num2str(n) ])

n = 1:0.5:5;
nImages = length(n);

fig = figure;
for idx = 1:nImages
    y = x.^n(idx);
    plot(x,y,'LineWidth',3)
    title(['y = x^n,  n = ' num2str( n(idx)) ])
    drawnow
    frame = getframe(fig);
    im{idx} = frame2im(frame);
    pause(0.4)
end
close;

figure;
for idx = 1:nImages
    subplot(3,3,idx)
    imshow(im{idx});
end

filename = 'testAnimated.gif'; % Specify the output file name
for idx = 1:nImages
    [A,map] = rgb2ind(im{idx},256);
    if idx == 1
        imwrite(A,map,filename,'gif','LoopCount',Inf,'DelayTime',1);
    else
        imwrite(A,map,filename,'gif','WriteMode','append','DelayTime',1);
    end
end

  

 未完待续~~~

 没办法好像插入的视频,不显示哎!

本文版权归作者和博客园所有,欢迎转载,但请在文章也页面明显位置给出原文链接。如对文章有任何意见或者建议,欢迎评论。个人才疏学浅,文章如有错误,欢迎指正,也欢迎大家分享交流自己更好的方法! 此外有时由于太懒不是自己写上去的,引用了一些大佬的文章,如有忘记备注原文内容链接,实非故意。
原文地址:https://www.cnblogs.com/csymemory/p/13770338.html