当前位置: 首页 > 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;相信这篇教程对你有所帮助~ 本文…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...