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.m和create_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.');
相关推荐
逆向编程8 小时前
MATLAB高级数据结构:cell、struct与table深度应用
开发语言·数据结构·matlab
星夜离尘568 小时前
MATLAB 刚体坐标变换:点、方向和逆变换为什么不能混用
matlab
Evand J1 天前
【PMSM滤波例程2】PMSM未知负载转矩观测EKF。MATLAB例程(负载增广EKF与实际仿真结果)。附下载链接
开发语言·matlab·电机
机器学习之心1 天前
基于贝叶斯物理信息神经网络的矿产预测与不确定性量化,MATLAB代码及复现报告
人工智能·神经网络·matlab·贝叶斯物理信息神经网络
Evand J2 天前
【PMSM例程4】PMSM电阻辨识与模型补偿EKF,MATLAB例程。附下载链接,包运行成功
开发语言·matlab·电机·ekf·卡尔曼·pmsm
slandarer2 天前
MATLAB | 文艺复兴:万圣节使用 MATLAB 绘制黑人抬棺动画
matlab·黑人抬棺
大江东去浪淘尽千古风流人物2 天前
【FLORA】机器人视频标注引擎解析:三模型如何产出动作指令与四类奖励信号
matlab·机器人·跨模态·遥感·图像匹配·1024程序员节·特征描述符
星夜离尘563 天前
MATLAB ADC 码流触顶诊断:命中数、缺口分段与削顶不可辨识性
开发语言·matlab
Evand J3 天前
【MATLAB例程】平面下,5基站对待定位点的定位。基于距离辅助下的AOA。完整代码下载链接
开发语言·matlab·平面·定位·导航·测距·aoa
iCxhust3 天前
MATLAB SPWM仿真
开发语言·matlab