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

一、绘制初始图像

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

二、绘制动态图的每一帧

思路:

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

实例代码:

import numpy as np
import matplotlib.pyplot as pltfor 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 osdef create_gif(image_list, gif_name, duration=0.35):frames = []for image_name in image_list:frames.append(imageio.imread(image_name))# 转化成gifimageio.mimsave(gif_name, frames, 'GIF', duration=duration)returndef 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)# 创建gifgif_name = 'result.gif'  # 设置动态图的名字duration = 0.2create_gif(image_list, gif_name, duration)       # 创建动态图# 创建video# create_video(image_list=image_list)if __name__ == '__main__':main()

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

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

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

相关文章

新火种AI|GPT-4诞生1年,OpenAI把它放到了机器人上

作者:一号 编辑:美美 ChatGPT拥有了身体,机器人也有了灵魂。 从OpenAI在去年3月14日拿出GPT-4后,已经过了整整一年。显然,在GPT-4诞生之后的这一年,一切都迭代得太快了,从GPT-4展现多模态能力&…

力扣热题100_矩阵_73_矩阵置零

文章目录 题目链接解题思路解题代码 题目链接 73.矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&…

SpringCloud微服务 黑马教程 自我总结笔记

来源出处: SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LQ4y127n4/?spm_id_from333.337.search-card.all.click 一、认识微服务 微服…

BEV系列一:BEV介绍和常用BEV算法简介

BEV系列一:BEV介绍和常用BEV算法简介 自动驾驶最全学习资料获取:链接

学生时期学习资源同步-1 第一学期结业考试题6

原创作者:田超凡(程序员田宝宝) 版权所有,引用请注明原作者,严禁复制转载

高效Go编程: encoding/csv标准库深度解析

高效Go编程: encoding/csv标准库深度解析 引言了解encoding/csv库CSV文件的基本结构encoding/csv库的核心功能应用场景 读取CSV文件基本步骤代码示例处理不同的分隔符错误处理 处理CSV数据数据解析代码示例处理不规则数据代码示例 写入CSV文件基本步骤代码示例自定义设置错误处…

群发邮件软件哪个好?8款国际流行软件推荐与评测

无论是小型企业还是大型企业,都需要一个高效、稳定且功能全面的群发邮件软件来完成营销任务。市场上的群发邮件软件琳琅满目,如Zoho Campaigns、Constant Contact、Intuit Mailchimp、Moosend、MailerLite、Systeme.io、Instantly、Saleshandy等&#xf…

Java Web程序的部署

写在前:要想将我们写好的项目让其他人可以访问,仅仅完成代码是不能直接运行的。这就需要在Linux系统上搭建Java web程序的运行环境。这里以我所做的博客系统为例,进行搭建。 1. 准备依赖 (1)JVM(JDK&#…

react04- mvc 、 mvvm

MVC与MVVM stackoverflow论坛网站 react前端框架 使用框架前: 操作dom > js获取dom元素,事件侦听,修改数据,设置样式。。。 操作dom问题: 直接操作dom,会造成大量的回流、重绘,消耗大量性能操作起来也…

Nodejs 第五十四章(net)

net模块是Node.js的核心模块之一,它提供了用于创建基于网络的应用程序的API。net模块主要用于创建TCP服务器和TCP客户端,以及处理网络通信。 TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,用于…

计网《二》|物理层|信道极限容量|码分复用|曼彻斯特编码

计网《二》|物理层 物理层的基本概念数据通信的基础知识数据通信模型常用术语有关信道的几个基本概念调制基带调制带通调制 常用编码方式不归零制归零编码曼彻斯特编码差分曼彻斯特编码 基本调制方法 信道的极限容量限制码元在信道上的传播速率的两个因素信道能够通过的频率范围…

学习Java的第十天

本章来讲一下什么是字符串 一、什么是字符串 在Java中,最常见的基本类型就是字符串了,哪哪都能见到,如输入语句,输出语句等!那么,什么是字符串呢,字符串就是String类,String类是Ja…