MATLAB使用绘图plot制作动态GIF

文章目录

  • [1 前言](#1 前言)
  • [2 Demo](#2 Demo)
    • [Demo 1 - 不使用函数](#Demo 1 - 不使用函数)
    • [Demo 2 - 使用函数](#Demo 2 - 使用函数)

1 前言

在PPT展示或者博客创作中,有时需要插入动态图如GIF,来演示算法效果或者结果。在MATLAB中,可以通过一些代码,将绘图plot转化为动态的GIF。

其大致方法为,写一个循环,每个循环为一个帧,绘制该帧的内容,将此时figure的内容转化为一帧图像,定义两帧的间隔,然后添加到GIF中(第一帧和其他帧的处理方式不一样,详见代码)。

如果想将GIF插入到CSDN博客中,只需要点击工具栏中的图片,然后添加即可。

效果如下:

2 Demo

这里提供两个demo。

Demo 1 - 不使用函数

需要一个文件,create_gif_demo_1.m

需要修改的只有两处:

  • 文件名 。这里文件名为animation.gif,注意不要漏了后缀。这样会在当前目录下,生成GIF文件。
  • 帧间隔。这里设置的时间间隔为0.1s,可以根据需要修改。
matlab 复制代码
clear all
clc

% Define the time steps for your animation
timeSteps = 0:0.1:2*pi;

% Create a figure handle
figure;

% Loop through each time step
for i = 1:length(timeSteps)
    % Generate your plot for each time step
    x = linspace(0, 2*pi, 100);
    y = sin(x + timeSteps(i));
    
    % Plot customization
    plot(x, y, 'LineWidth', 2);
    title('Sinusoidal Wave Animation');
    xlabel('X-axis');
    ylabel('Y-axis');
    
    % Capture the current frame
    frame = getframe(gcf);
    
    % Convert the frame to an image matrix
    img = frame2im(frame);
    [A,map] = rgb2ind(img,256);
    % Save the image as a GIF (adjust filename as needed)
    if i == 1
        imwrite(A,map, 'animation.gif', 'gif', 'Loopcount', inf, 'DelayTime', 0.1);
    else
        imwrite(A,map, 'animation.gif', 'gif', 'WriteMode', 'append', 'DelayTime', 0.1);
    end
    
	% Pause to create a smooth animation
	pause(0.1);% For real-time viewing only, can be removed
end

% Display a message indicating successful GIF creation
disp('GIF animation created successfully.');

Demo 2 - 使用函数

需要两个文件(放在同一目录下):create_gif.mcreate_gif_demo_2.m

不同于demo 1的地方在于,这里把和GIF相关的代码封装进一个函数里。

这样只需要传入参数:是否为第一帧的flag,帧与帧的时间间隔,GIF文件名称。

matlab 复制代码
function [] = create_gif(flag,delay_time,name_of_the_file)
    % 
    % Capture the current frame
    frame = getframe(gcf);
    
    % Convert the frame to an image matrix
    img = frame2im(frame);
    [A,map] = rgb2ind(img,256);
    
    % Save the image as a GIF (adjust filename as needed)
    if flag == 1 % flag == 1 means it's the first frame
        imwrite(A,map, name_of_the_file, 'gif', 'Loopcount', inf, 'DelayTime', delay_time);
    else
        imwrite(A,map, name_of_the_file, 'gif', 'WriteMode', 'append', 'DelayTime', delay_time);
    end
end
matlab 复制代码
clear all
clc

delay = 0.1; % delay between frames, 0.1s
file_name = 'gif_demo_2.gif'; % file name, careful about the .gif suffix

% Define the time steps for your animation
timeSteps = 0:0.1:2*pi;

% Create a figure handle
figure;

% Loop through each time step
for i = 1:length(timeSteps)
    % Generate your plot for each time step
    x = linspace(0, 2*pi, 100);
    y = sin(x + timeSteps(i));
    
    % Plot customization
    plot(x, y, 'LineWidth', 2);
    title('Sinusoidal Wave Animation');
    xlabel('X-axis');
    ylabel('Y-axis');
    
    % Create GIF
    flag = i; % flag to indicate whether it's the first frame
    create_gif(flag, delay, file_name);
    
	% Pause to create a smooth animation
	pause(0.1);% For real-time viewing only, can be removed
end

% Display a message indicating successful GIF creation
disp('GIF animation created successfully.');
相关推荐
cici158741 小时前
基于LSTM算法的MATLAB短期风速预测实现
开发语言·matlab
jllllyuz1 小时前
室外可见光通信信道建模与MATLAB实现(直射链路与反射链路)
开发语言·matlab
沐欣工作室_lvyiyi2 小时前
IIR数字带通滤波器(论文+源码)
算法·matlab·毕业设计·数字滤波器
EW Frontier3 小时前
【无人机】突破无人机检测瓶颈!基于 EMD/EEMD 与机器学习的射频指纹分解新方案【附MATLAB+python代码】
机器学习·matlab·无人机·无人机检测·无人机识别
沐欣工作室_lvyiyi3 小时前
基于窗函数法的FIR滤波器设计(论文+源码)
人工智能·matlab·毕业设计·语音识别·fir滤波器
Evand J7 小时前
【MATLAB程序,一维非线性EKF与RTS】MATLAB,用于一维的位移与速度滤波和RTS平滑/高精度定位,带滤波前后的误差对比
开发语言·matlab·卡尔曼滤波·rts平滑·正向滤波
米饭的白色15 小时前
matlab 中 `对数坐标` 画图下的 `hold on` 位置对坐标轴刻度的影响
开发语言·matlab
TTGGGFF21 小时前
控制系统建模仿真(八):PID 控制器的参数整定
matlab·simulink·pid
ytttr8731 天前
基于MATLAB实现时间序列小波相干性分析
开发语言·matlab
hoiii1871 天前
基于MATLAB的Kriging代理模型实现与优化
开发语言·matlab