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.');
相关推荐
ι:16 小时前
单相桥式全控整流仿真从零复现教学
windows·学习·matlab·simulink
菜鸟~noob23319 小时前
【电子战】第14篇:TOA 定位——圆交汇与到达时间【含matlab代码】
开发语言·matlab
简简单单做算法1 天前
基于灰狼算法和贝叶斯联合优化的BiLSTM(GWO-BO-BiLSTM)一维时间序列预测算法matlab仿真
matlab·一维时间序列预测·gwo-bo-bilstm
Evand J1 天前
【MATLAB例程|图像滤波降噪13】局部噪声方差自适应滤波(LNR)图像降噪与效果展示。附完整例程的下载链接
图像处理·计算机视觉·matlab·滤波·代码·降噪
weixin_307779132 天前
C++代码实现MATLAB中的ode23t函数功能
开发语言·c++·算法·matlab
Evand J2 天前
【MATLAB例程】二维Astar路径规划与AOA-TDOA定位仿真。完整代码,附下载链接。包运行成功,带中文注释
开发语言·matlab·路径规划·代码·定位·融合定位
路径规划6663 天前
(MATLAB代码)退火PSO融合DWA算法的船舶路径规划MATLAB实现(260915)
matlab·路径规划·船舶·dwa·pso粒子群算法
weixin_307779133 天前
C++代码实现MATLAB中的ode45函数功能
开发语言·c++·算法·matlab
菜鸟~noob2334 天前
【电子战】第15篇:混合定位——TDOA/FDOA/AOA 联合【含matlab代码】
开发语言·matlab
Evand J5 天前
【MATLAB例程,图像滤波降噪12】加权中值滑动窗口滤波(WMF)图像降噪,包含滤波质量评价。附代码下载链接
开发语言·图像处理·人工智能·计算机视觉·matlab·滑动窗口·滤波