MATLAB使用绘图plot制作动态GIF

文章目录

  • 1 前言
  • 2 Demo
    • Demo 1 - 不使用函数
    • 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,可以根据需要修改。
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 stepx = linspace(0, 2*pi, 100);y = sin(x + timeSteps(i));% Plot customizationplot(x, y, 'LineWidth', 2);title('Sinusoidal Wave Animation');xlabel('X-axis');ylabel('Y-axis');% Capture the current frameframe = getframe(gcf);% Convert the frame to an image matriximg = frame2im(frame);[A,map] = rgb2ind(img,256);% Save the image as a GIF (adjust filename as needed)if i == 1imwrite(A,map, 'animation.gif', 'gif', 'Loopcount', inf, 'DelayTime', 0.1);elseimwrite(A,map, 'animation.gif', 'gif', 'WriteMode', 'append', 'DelayTime', 0.1);end% Pause to create a smooth animationpause(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文件名称。

function [] = create_gif(flag,delay_time,name_of_the_file)% % Capture the current frameframe = getframe(gcf);% Convert the frame to an image matriximg = 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 frameimwrite(A,map, name_of_the_file, 'gif', 'Loopcount', inf, 'DelayTime', delay_time);elseimwrite(A,map, name_of_the_file, 'gif', 'WriteMode', 'append', 'DelayTime', delay_time);end
end
clear all
clcdelay = 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 stepx = linspace(0, 2*pi, 100);y = sin(x + timeSteps(i));% Plot customizationplot(x, y, 'LineWidth', 2);title('Sinusoidal Wave Animation');xlabel('X-axis');ylabel('Y-axis');% Create GIFflag = i; % flag to indicate whether it's the first framecreate_gif(flag, delay, file_name);% Pause to create a smooth animationpause(0.1);% For real-time viewing only, can be removed
end% Display a message indicating successful GIF creation
disp('GIF animation created successfully.');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/488501.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java】java异常处理机制(实验五)

目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 1、理解java的异常处理机制 2、掌握try catch结构和thow和thows关键字的用法 二、实验内容 1、编写一个程序,输入某个班某门课程成绩,统计及格人数、不及格人数及课程平均分。设计一个异…

查看navicat保存的数据库连接密码

背景 经常使用navicat的朋友可能会碰到忘记数据库连接密码的情况,自然会想到navicat连接配置中就保存了密码。 个人经验,按以下步骤可查看密码明文 本人在mac上使用的navicat版本 1,导出connection_local.ncx 点击OK导出保存为connection_l…

AT7456E集成了EEPROM的显示器芯片

AT7456E 是一款集成了 EEPROM 的单通道、单色随屏显示发生器,集成了视频驱动器、同步分离器、视频分离开关以及 EEPROM,提高了系统的集成度,有效降低了系统成本。 优势 1.采用符合 NTSC 和 PAL 制式的 512 个用户可编程字符,适合…

fpga_硬件加速引擎

一 什么是硬件加速引擎 硬件加速引擎,也称硬件加速器,是一种采用专用加速芯片/模块替代cpu完成复杂耗时的大算力操作,其过程不需要或者仅需要少量cpu参与。 二 典型的硬件加速引擎 典型的硬件加速引擎有GPU,DSP,ISP&a…

【三、接口协议与抓包】TCP/UDP协议的基本实现

你好啊!我是山茶,一个持续探索 AI 测试之路的程序员。 TCP 协议与 TCP/IP 协议之间的关系,TCP 与 UDP 包含在 TCP/IP 中,TCP/IP 是协议簇名称 TCP (传输控制协议) 和 UDP (用户数据报协议) 是 TCP/IP 协议簇中,两个互…

数据结构与算法相关题解20240224

数据结构与算法相关题解 一、1. 两数之和二、121. 买卖股票的最佳时机三、122. 买卖股票的最佳时机 II四、169. 多数元素五、229. 多数元素 II六、55. 跳跃游戏七、45. 跳跃游戏 II 一、1. 两数之和 简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数…

2024全国水科技大会暨流域水环境治理与水生态修复论坛(六)

论坛召集人 冯慧娟 中国环境科学研究院流域中心研究员 刘 春 河北科技大学环境与工程学院院长、教授 一、会议背景 为深入贯彻“山水林田湖是一个生命共同体”的重要指示精神,大力实施生态优先绿色发展战略,积极践行人、水、自然和谐共生理念&…

ETL:数据转换与集成的关键过程

ETL:数据转换与集成的关键过程 在现代数据驱动的世界中,有效地管理和处理数据对于企业的成功至关重要。ETL(提取、转换、加载)是一种关键的数据处理过程,有助于将数据从源系统提取、清洗、转换并加载到目标系统中&…

【Spring】循环依赖

目录标题 什么是循环依赖循环依赖场景Java SE 演示Spring 容器演示三级缓存核心知识三级缓存四大方法三级缓存中的迁移 三级缓存源码分析源码思维导图 源码图例课前问题推荐阅读 循环依赖是什么?循环依赖的场景有哪一些?三级缓存分别是什么?三…

【Docker 的安装:centos】

文章目录 1 :peach:各版本平台支持情况:peach:2 :peach:CentOS 安装:peach:2.1 :apple:安装依赖:apple:2.2 :apple:安装 Docker:apple:2.3 :apple:实战经验:apple:2.3.1 :lemon:Docker 镜像源修改:lemon:2.3.2 :lemon:Docker 目录修改:lemon: 1 🍑各版本平台支持情况…

TensorRT及CUDA自学笔记003 CUDA编程模型、CUDA线程模型及其管理、CUDA内存模型及其管理

TensorRT及CUDA自学笔记003 CUDA编程模型、CUDA线程模型及其管理、CUDA内存模型及其管理 各位大佬,这是我的自学笔记,如有错误请指正,也欢迎在评论区学习交流,谢谢! CUDA编程模型 我们使用CUDA_C语言进行CUDA编程&am…

Python爬虫之点触验证码的识别

点触验证码的识别 除了极验验证码,还有另一种常见且应用广泛的验证码,即点触验证码。 可能你对这个名字比较陌生,但是肯定见过类似的验证码,比如 12306 就是典型的点触验证码。 直接点击图中符合要求的图。所有答案均正确&#…