python画图|曲线动态输出
【1】引言
前序教程中的曲线动态输出,其实是把曲线按照左右移动的形式输出(波的传递形式)。
python画图|曲线动态输出基础教程_python 动态曲线-CSDN博客
但有些时候我们更期待的是曲线不移动,随着自变量的增加而输出因变量,因此这是两种曲线输出教程。
基于上述区别说明,很有必要对后一种方法进行探索。
【2】官网教程
首先点击下述链接可以直达官网,我们将会看到期待的动态输出曲线。
https://matplotlib.org/stable/gallery/animation/animate_decay.html#sphx-glr-gallery-animation-animate-decay-py
基于此我们对官网教程进行解读。
【3】代码解读
首先引入了好几个模块:
import itertools #引入itertools模块,可实现变量无限输出import matplotlib.pyplot as plt #引入画图模块 import numpy as np #引入计算模块import matplotlib.animation as animation #引入动画模块
这里的itertools模块第一次引入,可以实现比自变量的无限输出。
然后先定义了一个变量产生函数,并将自变量和因变量的关系进行了定义:
def data_gen(): #自定义函数,使用itertools.count()模块for cnt in itertools.count(): #创造一个从0开始,步长是1的无线循环,输出结果全部赋值给cntt = cnt / 10 # 计算cnt/10后赋值给tyield t, np.sin(2*np.pi*t) * np.exp(-t/10.) #返回t, np.sin(2*np.pi*t) * np.exp(-t/10.)
之后再定义了变量的范围:
def init(): #自定义函数ax.set_ylim(-1.1, 1.1) #设置Y轴范围ax.set_xlim(0, 1) #设置X轴范围del xdata[:] #定义一个空矩阵xdata[]del ydata[:] #定义一个空矩阵ydata[]line.set_data(xdata, ydata) #设置曲线的自变量和因变量return line, #返回曲线的数值
其实直到此时,才完成要画图对应各个变量的定义,并且自变量和因变量还是空矩阵。
完成变量的初步定义之后,定义要画图:
fig, ax = plt.subplots() #定义要画图 line, = ax.plot([], [], lw=2) #定义要画曲线 ax.grid() #给输出曲线增加网格 xdata, ydata = [], [] #定义xdata和ydata为空矩阵
在前述的定义中,自变量一直未实质赋值,接下来通过append()函数进行赋值,并修改了X轴的范围:
def run(data): #自定义函数# update the datat, y = data #定义变相t和yxdata.append(t) #xdata为t的所有取值ydata.append(y) #ydata为y的所有取值xmin, xmax = ax.get_xlim() #X轴的最小值和最大值(xmin和xmax)从xlim()中取出if t >= xmax: #当自变量超出X轴上限ax.set_xlim(xmin, 2*xmax) #将X轴取值扩大两倍ax.figure.canvas.draw() #输出图形line.set_data(xdata, ydata) #定义曲线变量return line, #返回曲线值
最后实现动态输出:
ani = animation.FuncAnimation(fig, run, data_gen, interval=100, init_func=init,save_count=100) #输出动画 plt.show() #输出图形
此时获得的输出结果为:
图1
此时对应的完整代码为:
import itertools #引入itertools模块,可实现变量无限输出import matplotlib.pyplot as plt #引入画图模块
import numpy as np #引入计算模块import matplotlib.animation as animation #引入动画模块def data_gen(): #自定义函数,使用itertools.count()模块for cnt in itertools.count(0.,0.5): #创造一个从0开始,步长是1的无线循环,输出结果全部赋值给cntt = cnt / 10 # 计算cnt/10后赋值给tyield t, np.sin(2*np.pi*t) * np.exp(-t/10.) #返回t, np.sin(2*np.pi*t) * np.exp(-t/10.)def init(): #自定义函数ax.set_ylim(-1.1, 1.1) #设置Y轴范围ax.set_xlim(0, 1) #设置X轴范围del xdata[:] #定义一个空矩阵xdata[]del ydata[:] #定义一个空矩阵ydata[]line.set_data(xdata, ydata) #设置曲线的自变量和因变量return line, #返回曲线的数值fig, ax = plt.subplots() #定义要画图
line, = ax.plot([], [], lw=2) #定义要画曲线
ax.grid() #给输出曲线增加网格
xdata, ydata = [], [] #定义xdata和ydata为空矩阵def run(data): #自定义函数# update the datat, y = data #定义变相t和yxdata.append(t) #xdata为t的所有取值ydata.append(y) #ydata为y的所有取值xmin, xmax = ax.get_xlim() #X轴的最小值和最大值(xmin和xmax)从xlim()中取出if t >= xmax: #当自变量超出X轴上限ax.set_xlim(xmin, 2*xmax) #将X轴取值扩大两倍ax.figure.canvas.draw() #输出图形line.set_data(xdata, ydata) #定义曲线变量return line, #返回曲线值# Only save last 100 frames, but run forever
ani = animation.FuncAnimation(fig, run, data_gen, interval=100, init_func=init,save_count=100) #输出动画
plt.show() #输出图形
#ani.save('ani.gif') #保存动画
实际上,当在PC上运行上述代码时,输出的图形是无限的,不会停止。
图2
这是因为itertools.count()函数并没有给出任何停止输出自变量的信号,因此有必要设置输出停止代码。
【3】代码改写
在itertools.count()函数下方增加break操作:
if(t>20):break
此时的完整代码为:
import itertools #引入itertools模块import matplotlib.pyplot as plt #引入画图模块
import numpy as np #引入计算模块import matplotlib.animation as animation #引入动画模块def data_gen(): #自定义函数,使用itertools.count()模块for cnt in itertools.count(0.,0.5): #创造一个从0开始,步长是1的无线循环,输出结果全部赋值给cntt = cnt / 10 # 计算cnt/10后赋值给tyield t, np.sin(2*np.pi*t) * np.exp(-t/10.) #返回t, np.sin(2*np.pi*t) * np.exp(-t/10.)if(t>20):breakdef init(): #自定义函数ax.set_ylim(-1.1, 1.1) #设置Y轴范围ax.set_xlim(0, 1) #设置X轴范围del xdata[:] #定义一个空矩阵xdata[]del ydata[:] #定义一个空矩阵ydata[]line.set_data(xdata, ydata) #设置曲线的自变量和因变量return line, #返回曲线的数值fig, ax = plt.subplots() #定义要画图
line, = ax.plot([], [], lw=2) #定义要画曲线
ax.grid() #给输出曲线增加网格
xdata, ydata = [], [] #定义xdata和ydata为空矩阵def run(data): #自定义函数# update the datat, y = data #定义变相t和yxdata.append(t) #xdata为t的所有取值ydata.append(y) #ydata为y的所有取值xmin, xmax = ax.get_xlim() #X轴的最小值和最大值(xmin和xmax)从xlim()中取出if t >= xmax: #当自变量超出X轴上限ax.set_xlim(xmin, 2*xmax) #将X轴取值扩大两倍ax.figure.canvas.draw() #输出图形line.set_data(xdata, ydata) #定义曲线变量return line, #返回曲线值# Only save last 100 frames, but run forever
ani = animation.FuncAnimation(fig, run, data_gen, interval=0.10, init_func=init,save_count=1000) #输出动画
ani.save('ani-1000.gif') #保存动画
plt.show() #输出图形
运行代码后将发现,自变量最大值为20:
图3
【4】总结
探索了曲线动态输出的教程,掌握了输出范围等的设置技巧。
相关文章:

python画图|曲线动态输出
【1】引言 前序教程中的曲线动态输出,其实是把曲线按照左右移动的形式输出(波的传递形式)。 python画图|曲线动态输出基础教程_python 动态曲线-CSDN博客 但有些时候我们更期待的是曲线不移动,随着自变量的增加而输出因变量&am…...
电子商务类型
常见电子商务类型及其代表性的例子: B2B(Business to Business) 定义:B2B 模式是指企业与企业之间的商业交易。在这种模式下,企业通过电子商务平台相互提供产品或服务。 特点: 大宗交易:通常…...

vue elementui el-table实现增加行,行内编辑修改
需求: 前端进行新增表单时,同时增加表单的明细数据。明细数据部分,可进行行编辑。 效果图: <el-card><div slot"header"><span style"font-weight: bold">外来人员名单2</span><…...
1. Redis简介与安装
1.1 什么是Redis Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,支持多种数据结构,如字符串、列表、集合、有序集合和哈希。它不仅能作为一个高效的缓存工具,还能作为消息队列、分布式锁和…...
Redis的持久化存储和集群管理操作
Redis 的持久化存储和集群 一、引言 Redis 是一个开源的内存数据结构存储系统,被广泛应用于缓存、消息队列、排行榜等场景。然而,由于数据存储在内存中,一旦服务器重启或出现故障,数据就会丢失。为了解决这个问题,Re…...

Auto-encoder(自编码器)
Auto-encoder(自编码器) 1 基本概念 自编码就和之前的cycle GAN的概念很像,假設你有非常大量的圖片,在 Auto-Encoder 裡面你有兩個 Network,一個叫做 Encoder,一個叫做 Decoder,他們就是兩個 N…...

Vue+sortable+el-table表格排序使用指南
前言 这两天遇到一个需求:在点击【设置优先级】的按钮后弹出关于玩法类型的table,点击【排序】按钮可以后可以进行排序。由于组内使用的组件库是 element-ui,那我首先就想到了使用 el-table组件,但奈何其版本原因不能相应的拖拽排…...
表数据删一半,为什么表文件大小不变?
参数innodb_file_per_table 这个参数设置为ON,表示每个表数据单独存在一个文件中,这时如果执行drop命令,系统会直接删除表文件。 这个参数设置为off时,所有表的数据和索引都存在共享的.ibdata文件,即使表删掉了&…...

MoCoOp: Mixture of Prompt Learning for Vision Language Models
文章汇总 当前的问题 1)数据集风格变化。 如图1所示,对于一个数据集,单个软提示可能不足以捕获数据中呈现的各种样式。同一数据集中的不同实例可能与不同的提示符兼容。因此,更**自然的做法是使用多个提示来充分表示这些变化**。 2)过拟合…...

YOLOv8 onnx 部署
本文是在win10系统下进行yolov8目标检测推理的过程记录。 yolov8 已经集成到OpenCV,可以通过两种方式调用,一种是直接通过OpenCV 调用,另外一种是通过onnx runtime(ort)调用。 1、安装cuda 、opencv 等依赖库,具体可以参考 Win1…...
在文件里引用目录文件下的静态资源图片不显示
问题:两种图片路径的指定方式,第一种能展示图片但第二种不能 两个 示例中,图片展示的差异。 在第一个示例中,图片路径是硬编码在 标签的 src 属性中的: <img src"../../assets/img/header01.png" style…...
vue使用 jsplumb 生成流程图
1、安装jsPlumb: npm install jsplumb 2、 在使用的 .vue 文件中引入 import { jsPlumb } from "jsplumb"; 简单示例: 注意:注意看 id 为"item-3"和"item-9"那条数据的连线配置 其中有几个小图片&#x…...

攻坚金融关键业务系统,OceanBase亮相2024金融科技大会
10月15-16日,第六届中新数字金融应用博览会与2024金融科技大会(简称“金博会”)在苏州工业园区联合举办。此次大会融合了国家级重要金融科技资源——“中国金融科技大会”,围绕“赋能金融高质量发展,金融科技创新前行”…...

《纳瓦尔宝典:财富和幸福指南》读书随笔
最近在罗胖的得到听书中听到一本书,感觉很有启发,书的名字叫《纳瓦尔宝典》,从书名上看给人的感觉应该财富知识类、鸡汤爆棚哪类。纳瓦尔,这个名字之前确实没有听说过,用一句话介绍一下,一个印度裔的硅谷中…...

C++ | STL | 侯捷 | 学习笔记
C | STL | 侯捷 | 学习笔记 文章目录 C | STL | 侯捷 | 学习笔记1 STL概述1.1 头文件名称1.2 STL基础介绍1.3 typename 2 OOP vs. GP3 容器3.1 容器结构分类3.2 序列式容器3.2.1 array测试深度探索 3.2.2 vector测试深度探索 3.2.3 list测试深度探索 3.2.4 forward_list测试深度…...
C函数基础
C语言中的函数教程 在C语言中,函数是一段组织好的、可重复使用的、用于执行特定任务的代码。函数可以提高代码的模块化和可重用性。以下是关于C语言中函数的详细教程。 1. 函数的定义与声明 1.1 函数定义 函数定义包括函数头和函数体。函数头包括函数返回类型、…...

html和css实现页面
任务4 html文件 任务5 htm文件 css文件 任务6 html文件 css文件 任务7 html文件 css文件...
Github_以太网开源项目verilog-ethernet代码阅读与移植(八)——移植工程分享
实验背景 第六篇计划是写项目中各个模块的实现和约束文件的编写,有的小伙伴有裁剪工程的需要,就先分享一个半成品以供参考,由于笔者水平有限,错误肯定会有,望批评指正。 实验内容 移植工程共享 实验步骤 工程一部…...

【大模型实战篇】大模型分词算法BPE(Byte-Pair Encoding tokenization)及代码示例
词元化是针对自然语言处理任务的数据预处理中一个重要步骤,目的是将原始文本切分成模型可以识别和处理的词元序列。在大模型训练任务中,就是作为大模型的输入。传统的自然语言处理方法,如基于条件随机场的序列标注,主要采用基于词…...

低功耗4G模组LCD应用示例超全教程!不会的小伙伴看这篇就够了!
希望大家通过本文的介绍,学会LCD显示屏与Air780E开发板结合使用的方法。利用LCD显示屏,你可以为你的项目增加丰富的显示内容,提升用户体验。记住,实践出真知,赶快动手尝试吧!相信这篇教程对你有所帮助~ 本文…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...