【Python】使用plt库绘制动态曲线图,并导出为GIF或MP4

news2024/11/18 1:48:28

一、绘制初始图像

正常使用plt进行绘图,这里举例一个正弦函数:
在这里插入图片描述

二、绘制动态图的每一帧

思路:

  • 根据横坐标点数绘制每一帧画面
  • 每次在当前坐标处,绘制一个点和垂直的线,来表示当前点
  • 可以在点上加个坐标等样式来增加动态效果

实例代码:

import numpy as np
import matplotlib.pyplot as plt

for i in range(len(x)):
    plt.figure()
    
    x = np.linspace(0, 12, 121)  
    y = np.sin(x)  
    
    # 绘制垂直横线
    plt.vlines(x=x[i], ymin=-1, ymax=1, colors='black', linestyles='dashdot')
    
    # 绘制水平横线
    plt.hlines(y=0, xmin=0, xmax=12, colors='black', linestyles='solid',linewidths=3)
    
    plt.plot(x, y)  
    
    plt.scatter(x[i],y[i],color='red',s=30)
    
    
    plt.grid(True, linestyle='--', alpha=0.5)
    
    plt.savefig(f"./test/{i}.png")
    plt.show()
    plt.close()

效果如下:

在这里插入图片描述

三、利用imageio库制作视频或者gif

最后,把所有图像绘制成一个动态图或者视频就可以实现了,效果还是客观的。

import imageio   # 主要使用imageio这个库
import os

def create_gif(image_list, gif_name, duration=0.35):
    frames = []
    
    for image_name in image_list:
        frames.append(imageio.imread(image_name))
        
    # 转化成gif
    imageio.mimsave(gif_name, frames, 'GIF', duration=duration)
    return


def create_video(image_list):
    filename = 'output3.mp4'
    filepath = os.path.join(os.getcwd(), filename)
    
    frames = []
    for image_name in image_list:
        frames.append(imageio.imread(image_name))
        
    # 将图片转换为视频
    fps = 2  # 每秒钟帧数
    with imageio.get_writer(filepath, fps=fps) as video:
        for image in frames:
            # frame = image.convert('RGB')
            video.append_data(image)
            
def main():
    orgin = './test'      # 首先设置图像文件路径
    files = os.listdir(orgin)  

    image_list = []
    
    for i in range(len(files)):
        file_dir = f"{i}.png"
        path = os.path.join(orgin, file_dir)
        image_list.append(path)
    
    # 创建gif
    gif_name = 'result.gif'  # 设置动态图的名字
    duration = 0.2
    create_gif(image_list, gif_name, duration)       # 创建动态图
    
    # 创建video
    # create_video(image_list=image_list)


if __name__ == '__main__':
    main()

效果如图:
请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ENISA 2023年威胁态势报告:主要发现和建议

欧盟网络安全局(ENISA)最近发布了其年度2023年威胁态势报告。该报告确定了预计在未来几年塑造网络安全格局的主要威胁、主要趋势、威胁参与者和攻击技术。在本文中,我们将总结报告的主要发现,并提供可操作的建议来缓解这些威胁。 介绍 ENISA 威胁态势报告…

基于SSM的网上医院预约挂号系统的设计与实现(论文+源码)_kaic

摘 要 如今的信息时代,对信息的共享性,信息的流通性有着较高要求,因此传统管理方式就不适合。为了让医院预约挂号信息的管理模式进行升级,也为了更好的维护医院预约挂号信息,网上医院预约挂号系统的开发运用就显得很…

linux系统网络配置

文章目录 Linux系统配置IPLinux系统配置DNSLinux网卡名称命名CentOS7密码重置远程管理Linux服务器 前文我们了解如何启动linux系统,接下来我们继续学习如何配置linux系统的网络,同时也是学习一下Centos 7 系统的密码重置以及借用工具远程链接服务器 Lin…

Python二级备考

考试大纲如下: 基本要求 考试内容 考试方式 比较希望能直接刷题,因为不懂的比较多可能会看视频。 基础操作刷题: 知乎大头计算机1-13题 import jieba txtinput() lsjieba.lcut(txt) print("{:.1f}".format(len(txt)/len(ls)…

WorldGPT、Pix2Pix-OnTheFly、StyleDyRF、ManiGaussian、Face SR

本文首发于公众号:机器感知 WorldGPT、Pix2Pix-OnTheFly、StyleDyRF、ManiGaussian、Face SR HandGCAT: Occlusion-Robust 3D Hand Mesh Reconstruction from Monocular Images We propose a robust and accurate method for reconstructing 3D hand mesh from m…

Selenium 学习(0.20)——软件测试之单元测试

我又(浪完)回来了…… 很久没有学习了,今天忙完终于想起来学习了。没有学习的这段时间,主要是请了两个事假(5工作日和10工作日)放了个年假(13天),然后就到现在了。 看了下…

每周一算法:A*(A Star)算法

八数码难题 题目描述 在 3 3 3\times 3 33 的棋盘上,摆有八个棋子,每个棋子上标有 1 1 1 至 8 8 8 的某一数字。棋盘中留有一个空格,空格用 0 0 0 来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局…

微信小程序购物/超市/餐饮/酒店商城开发搭建过程和需求

1. 商城开发的基本框架 a. 用户界面(Frontend) 页面设计:包括首页、商品列表、商品详情、购物车、下单界面、用户中心等。交云设计:如何让用户操作更加流畅,包括搜索、筛选、排序等功能的实现。响应式设计&#xff1…

【JAVA重要知识 | 第六篇】Java集合类使用总结(List、Set、Map接口及常见实现类)以及常见面试题

文章目录 6.Java集合类使用总结6.1概览6.1.1集合接口类特性6.1.2List接口和Set接口的区别6.1.3简要介绍(1)List接口(2)Set接口(3)Map接口 6.2Collection接口6.3List接口6.3.1ArrayList6.3.2LinkedList—不常…

网络模块使用Hilt注入

retrofit的异步回调方法已经做了线程切换&#xff0c;切换到了主线程 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"><uses-permission android:name"andr…

Solidity 智能合约开发 - 基础:基础语法 基础数据类型、以及用法和示例

苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏 ←持续记录本人自学两年走过无数弯路的智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 本篇主要是做一个知识的整理和规划 作为一个类似文档的作用 更为简要和明了 具体的实现案例和用法 后续会陆续给出…

Milvus向量数据库检索

官方文档&#xff1a;https://milvus.io/docs/search.md   本节介绍如何使用 Milvus 搜索实体。   Milvus 中的向量相似度搜索会计算查询向量与具有指定相似度度量的集合中的向量之间的距离&#xff0c;并返回最相似的结果。您可以通过指定过滤标量字段或主键字段的布尔表达…

Redis及其数据类型和常用命令(一)

Redis 非关系型数据库&#xff0c;不需要使用sql语句对数据库进行操作&#xff0c;而是使用命令进行操作&#xff0c;在数据库存储时使用键值对进行存储&#xff0c;应用场景广泛&#xff0c;一般存储访问频率较高的数据。 一般关系型数据库&#xff08;使用sql语句进行操作的…

市场复盘总结 20240314

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率中 25% 最常用的…

二.递归及实例(汉诺塔问题)

目录 5.递归 6-递归实例:汉诺塔问题 思路: 详细过程: 代码: 5.递归 调用自身 结束条件 6-递归实例:汉诺塔问题 思路: 结果: 详细过程: 代码: #n为盘子的个数 a,b,c分别为3个地方. def hannuta(n,a,b,c): ​if n>0:hannuta(n-1,a,c,b) #将n-1个从a经过c移到到b(a…

【C语言_C语言语句_复习篇】

目录 一、C语言的语句有哪些 1.1 空语句 1.2 表达式语句 1.3 函数调用语句 1.4 复合语句 1.5 控制语句 二、分支语句&#xff08;两种&#xff09; 1.1 if语句 1.1.1 普通分支语句(if、if_else) 1.1.2 嵌套if语句 1.1.3 else嵌套if两种写法的比较 1.1.4 else悬空问题 1.1.…

代码随想录算法训练营第四十七天|动态规划|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

198.打家劫舍 文章 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代…

Docker容器化技术(使用Docker搭建论坛)

第一步&#xff1a;删除容器镜像文件 [rootlocalhost ~]# docker rm -f docker ps -aq b09ee6438986 e0fe8ebf3ba1第二步&#xff1a;使用docker拉取数据库 [rootlocalhost ~]# docker run -d --name db mysql:5.7 02a4e5bfffdc81cb6403985fe4cd6acb0c5fab0b19edf9f5b8274783…

NLP:HanLP的下载与使用

昨天说到要做一个自定义的训练模型&#xff0c;但是很快这个想法就被扑灭了&#xff0c;因为这个手工标记的成本太大&#xff0c;而且我的上级并不是想要我做这个场景&#xff0c;而是希望我通过这个场景展示出可以接下最终需求的能力。换句话来说&#xff1a;可以&#xff0c;…

leetcode代码记录(找到小镇的法官

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 小镇里有 n 个人&#xff0c;按从 1 到 n 的顺序编号。传言称&#xff0c;这些人中有一个暗地里是小镇法官。 如果小镇法官真的存在&#xff0c;那么&#xff1a; 小镇法官不会信任任何…