当前位置: 首页 > news >正文

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() #输出图形

此时获得的输出结果为:

5f7b30fa721849abb0956694981b6eb1.gif

图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上运行上述代码时,输出的图形是无限的,不会停止。

bb12fb654cdb44539af6c65e3a35a07b.png

图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:

f89d06124ff0449db8c172463ccf17e4.gif

图3

【4】总结

探索了曲线动态输出的教程,掌握了输出范围等的设置技巧。

 

相关文章:

python画图|曲线动态输出

【1】引言 前序教程中的曲线动态输出,其实是把曲线按照左右移动的形式输出(波的传递形式)。 python画图|曲线动态输出基础教程_python 动态曲线-CSDN博客 但有些时候我们更期待的是曲线不移动,随着自变量的增加而输出因变量&am…...

电子商务类型

常见电子商务类型及其代表性的例子: B2B(Business to Business) 定义:B2B 模式是指企业与企业之间的商业交易。在这种模式下,企业通过电子商务平台相互提供产品或服务。 特点: 大宗交易:通常…...

vue elementui el-table实现增加行,行内编辑修改

需求&#xff1a; 前端进行新增表单时&#xff0c;同时增加表单的明细数据。明细数据部分&#xff0c;可进行行编辑。 效果图&#xff1a; <el-card><div slot"header"><span style"font-weight: bold">外来人员名单2</span><…...

1. Redis简介与安装

1.1 什么是Redis Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、基于内存的数据结构存储系统&#xff0c;支持多种数据结构&#xff0c;如字符串、列表、集合、有序集合和哈希。它不仅能作为一个高效的缓存工具&#xff0c;还能作为消息队列、分布式锁和…...

Redis的持久化存储和集群管理操作

Redis 的持久化存储和集群 一、引言 Redis 是一个开源的内存数据结构存储系统&#xff0c;被广泛应用于缓存、消息队列、排行榜等场景。然而&#xff0c;由于数据存储在内存中&#xff0c;一旦服务器重启或出现故障&#xff0c;数据就会丢失。为了解决这个问题&#xff0c;Re…...

Auto-encoder(自编码器)

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

Vue+sortable+el-table表格排序使用指南

前言 这两天遇到一个需求&#xff1a;在点击【设置优先级】的按钮后弹出关于玩法类型的table&#xff0c;点击【排序】按钮可以后可以进行排序。由于组内使用的组件库是 element-ui&#xff0c;那我首先就想到了使用 el-table组件&#xff0c;但奈何其版本原因不能相应的拖拽排…...

表数据删一半,为什么表文件大小不变?

参数innodb_file_per_table 这个参数设置为ON&#xff0c;表示每个表数据单独存在一个文件中&#xff0c;这时如果执行drop命令&#xff0c;系统会直接删除表文件。 这个参数设置为off时&#xff0c;所有表的数据和索引都存在共享的.ibdata文件&#xff0c;即使表删掉了&…...

MoCoOp: Mixture of Prompt Learning for Vision Language Models

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

YOLOv8 onnx 部署

本文是在win10系统下进行yolov8目标检测推理的过程记录。 yolov8 已经集成到OpenCV&#xff0c;可以通过两种方式调用&#xff0c;一种是直接通过OpenCV 调用&#xff0c;另外一种是通过onnx runtime(ort)调用。 1、安装cuda 、opencv 等依赖库&#xff0c;具体可以参考 Win1…...

在文件里引用目录文件下的静态资源图片不显示

问题&#xff1a;两种图片路径的指定方式&#xff0c;第一种能展示图片但第二种不能 两个 示例中&#xff0c;图片展示的差异。 在第一个示例中&#xff0c;图片路径是硬编码在 标签的 src 属性中的&#xff1a; <img src"../../assets/img/header01.png" style…...

vue使用 jsplumb 生成流程图

1、安装jsPlumb&#xff1a; npm install jsplumb 2、 在使用的 .vue 文件中引入 import { jsPlumb } from "jsplumb"; 简单示例&#xff1a; 注意&#xff1a;注意看 id 为"item-3"和"item-9"那条数据的连线配置 其中有几个小图片&#x…...

攻坚金融关键业务系统,OceanBase亮相2024金融科技大会

10月15-16日&#xff0c;第六届中新数字金融应用博览会与2024金融科技大会&#xff08;简称“金博会”&#xff09;在苏州工业园区联合举办。此次大会融合了国家级重要金融科技资源——“中国金融科技大会”&#xff0c;围绕“赋能金融高质量发展&#xff0c;金融科技创新前行”…...

《纳瓦尔宝典:财富和幸福指南》读书随笔

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

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语言中&#xff0c;函数是一段组织好的、可重复使用的、用于执行特定任务的代码。函数可以提高代码的模块化和可重用性。以下是关于C语言中函数的详细教程。 1. 函数的定义与声明 1.1 函数定义 函数定义包括函数头和函数体。函数头包括函数返回类型、…...

html和css实现页面

任务4 html文件 任务5 htm文件 css文件 任务6 html文件 css文件 任务7 html文件 css文件...

Github_以太网开源项目verilog-ethernet代码阅读与移植(八)——移植工程分享

实验背景 第六篇计划是写项目中各个模块的实现和约束文件的编写&#xff0c;有的小伙伴有裁剪工程的需要&#xff0c;就先分享一个半成品以供参考&#xff0c;由于笔者水平有限&#xff0c;错误肯定会有&#xff0c;望批评指正。 实验内容 移植工程共享 实验步骤 工程一部…...

【大模型实战篇】大模型分词算法BPE(Byte-Pair Encoding tokenization)及代码示例

词元化是针对自然语言处理任务的数据预处理中一个重要步骤&#xff0c;目的是将原始文本切分成模型可以识别和处理的词元序列。在大模型训练任务中&#xff0c;就是作为大模型的输入。传统的自然语言处理方法&#xff0c;如基于条件随机场的序列标注&#xff0c;主要采用基于词…...

低功耗4G模组LCD应用示例超全教程!不会的小伙伴看这篇就够了!

希望大家通过本文的介绍&#xff0c;学会LCD显示屏与Air780E开发板结合使用的方法。利用LCD显示屏&#xff0c;你可以为你的项目增加丰富的显示内容&#xff0c;提升用户体验。记住&#xff0c;实践出真知&#xff0c;赶快动手尝试吧&#xff01;相信这篇教程对你有所帮助~ 本文…...

从RNN的“失忆症”到LSTM的“记忆宫殿”:图解三个门控单元如何拯救梯度消失

从RNN的"失忆症"到LSTM的"记忆宫殿"&#xff1a;图解三个门控单元如何拯救梯度消失 想象一下&#xff0c;你正在阅读一本精彩的小说&#xff0c;但每翻过一页就会忘记前一页的大部分内容——这就是标准RNN神经网络面临的困境。在自然语言处理和时间序列分析…...

不止于水:用MS动力学模拟和RDF分析,探究任意离子/分子在溶液中的溶剂化结构

从水到多元溶液&#xff1a;MS动力学模拟与RDF分析的高级应用指南 当我们需要理解溶液中离子或分子的行为时&#xff0c;径向分布函数(RDF)分析提供了一个强有力的工具。传统的纯水体系研究固然重要&#xff0c;但现实中的溶液系统往往更为复杂——电解液中的锂离子、蛋白质溶液…...

AI辅助开发实战:用Electron+React+TS构建跳台滑雪模拟器

1. 项目概述&#xff1a;一个由AI驱动的滑雪跳台模拟器如果你是一个体育游戏迷&#xff0c;尤其是对冬季项目里的跳台滑雪着迷&#xff0c;同时又对现代前端开发技术栈感兴趣&#xff0c;那么这个名为Sj.Sim Predazzo Edition的开源项目&#xff0c;绝对值得你花时间深入研究。…...

别再对着乱码发愁了!手把手教你用Python解码AIS VDM暗码(附完整代码)

从AIS暗码到可读数据&#xff1a;Python实战解析指南 当你第一次看到类似!AIVDM,1,1,,A,169DvlgP1R8KPtvFBfOCt3?h0RT,0*03这样的字符串时&#xff0c;可能会感到一头雾水。这串看似随机的字符实际上是AIS(船舶自动识别系统)传输的VDM(VHF Data-link Message)报文&#xff0c;…...

告别兼容性烦恼:在Vue/React项目中优雅集成sm-crypto国密算法(附IE9+解决方案)

告别兼容性烦恼&#xff1a;在Vue/React项目中优雅集成sm-crypto国密算法&#xff08;附IE9解决方案&#xff09; 国密算法作为国内信息安全领域的重要标准&#xff0c;在前端项目中的集成需求日益增长。然而&#xff0c;现代前端框架与老旧浏览器兼容性问题往往成为开发者的拦…...

3步实战UE4SS游戏Mod开发:从零构建你的第一个LUA脚本系统

3步实战UE4SS游戏Mod开发&#xff1a;从零构建你的第一个LUA脚本系统 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4S…...

Midjourney版本战争白皮书(V7终结篇 vs V8统治纪元):从token消耗策略、种子可控性、多主体一致性到商用合规链路的断代式升级

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;V7终结篇与V8统治纪元的战略分水岭 V7 版本的正式 EOL&#xff08;End-of-Life&#xff09;标志着一个技术周期的谢幕&#xff0c;而 V8 的全面 GA&#xff08;General Availability&#xff09;则开启…...

告别托盘“隐身术”:Total Commander 9.5 最小化任务栏设置详解(附F12配置技巧)

告别托盘“隐身术”&#xff1a;Total Commander 9.5 最小化任务栏设置详解&#xff08;附F12配置技巧&#xff09; 第一次打开Total Commander&#xff08;以下简称TC&#xff09;时&#xff0c;许多用户会被它的"消失术"困扰——点击窗口右上角的减号按钮后&#x…...

谷歌seo付费外链是什么? 深度拆解5种主流的外链买卖方式

在目前的搜索环境下&#xff0c;想要让网站在没有外部引荐的情况下出现在搜索结果前排&#xff0c;难度不亚于在一座无人的深山里开店却希望客流量爆满。链接建设&#xff0c;或者说大家心照不宣的“外链买卖”&#xff0c;已经变成了提升排名的必经之路。一、 揭开付费外链的真…...

TinyRedis随笔

在TinyRedis的内存与AOF之间的关系中&#xff0c;AOF接入点在命令层中&#xff0c;因为只有在执行写命令&#xff0c;修改DB内存之后&#xff0c;再对AOF文件进行写入。但是这里也存在一个问题&#xff0c;如果对aof文件写入失败了呢&#xff0c;那就会造成内存与aof文件数据不…...