Python实现四维图像绘制系统

news2025/1/12 1:56:35

文章目录

    • 动图绘制系统的实现
    • 播放控制
    • 接口优化
    • 总结

Python绘图系统:

  • 源码地址:Python打造动态绘图系统
  • 📈从0开始的3D绘图系统📉一套3D坐标,多个函数📊散点图、极坐标和子图
  • 自定义控件:绘图风格📉风格控件📊定制绘图风格
  • 坐标设置进阶:动态更新组件📌导入外部文件📌导入txt
  • 动图绘制:动图绘制

动图绘制系统的实现

所谓动图绘制,其实只需要一个循环,并且每次绘图之前,要有一定的延时。启用多线程和延时,需要导入下面两个模块

from threading import Thread
import time

接下来,就是self.btnAniStart函数和具体的动图绘制函数了

def btnAniStart(self): 
    Thread(target=self.btnDrawCycle, daemon=True).start()

def btnDrawCycle(self):
    dt = self.aniDelay.get()/1000.0
    for i in range(self.aniFrameNum.get()):
        self.tIndex = i
        self.btnDrawImg()
        time.sleep(dt)

点击播放按钮后效果如下

在这里插入图片描述

播放控制

从图像播放的角度来说,这个设计并不十分合理,因为点击播放的三角号之后,应该要给出一个停止播放的按钮,相应地DrawCycle函数也应该新增一个无尽循环模式。

为了实现播放控制,为播放按钮绑定一个可变字符串

self.btnStartText = tk.StringVar()
self.btnStartText.set("▶")
ttk.Button(frm, width=3, textvariable=self.btnStartText,
    command=self.btnAniStart).pack(**pDct)

然后修改btnAniStart,大致改成下面的形式,但这里只是添加了暂停的逻辑,但并没有真正实现暂停的功能

def btnAniStart(self):
    if self.btnStartText.get() == "▶":
        Thread(target=self.drawCycle, daemon=True).start()
        self.btnStartText.set("⏸")
    else:
        self.btnStartText.set("▶")

而真正实现暂停功能,就需要修改drawCycle函数了

def drawCycle(self):
    dt = self.aniDelay.get()/1000.0
    num = self.aniFrameNum.get()
    while self.btnStartText.get() == "⏸":
        self.tIndex = (self.tIndex + 1) % num
        self.btnDrawImg()
        time.sleep(dt)

在这里插入图片描述

至此,就完成了一个动态图像绘制系统。

接口优化

开发过程中会经常遇到新增的需求,这些需求的实现,会对原来的设计形成干扰,而且这些需求累加在一起,会导致代码变得十分畸形。比如一开始DrawType类只包含绘图类型和维度,所以在AxisList中做对象的时候,变量名取为drawTypeDim。但后来DrawType又加入了其他功能,使得drawTypeDim这个变量变得很蠢,所以接下来要重新命名。

主要变更如下

  • AxisList类

    • drawTypeDim 变为 drawType
  • DrawSystem类

    • drawTypeDim 变为 drawType
  • AxisList类中定义的函数,但DrawSystem中有调用

    • getDrawType -> getType
    • getDrawDim -> getDim

另外,由于t轴和xyz在绘图时的作用相去甚远,所以将getDim函数拆分成xyz和t两个函数。在AxisList中新增两个函数

def getXYZ(self):
    return self.getDim().replace("t", "")

def hasTimeAxis(self):
    return "t" in self.getDim()

更改DrawSystem中的调用,btnDrawImgal.getDim().replace('t',"")改为al.getXYZ()readDatas改写如下

def readDatas(self, al):
    dct = {}
    data = {}
    if al.hasTimeAxis():
        data['t'] = al.setData('t')
        dct['t'] = data['t'][self.tIndex]
    for flag in al.getXYZ():
        data[flag] = al.setData(flag, **dct)
        dct[flag] = data[flag]
    return data

总结

本文正好是Python绘图系统的第20篇博客。目前,这个绘图系统可以绘制二维Plot,三维Plot,极坐标Plot,而且支持子图的绘制。而今又添加了动态图形的绘制功能。

尽管从目前来说,这段程序称不上是一个完备的软件,因为这里没有基本的报错系统,也没有日志管理系统,但作为一个快速入门的基础项目来说,却是非常适宜的。同时,这个系统已经具备了初步的骨架,基于这套代码,可以进一步实现更加复杂的绘图功能,换言之,从极客的角度来说,这个绘图系统已经具备了“可玩性”。

这个项目虽然体量很小,目前只有不到500行代码,但对于一个0到5年码零的Pythoner来说,看了必会有所得。

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

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

相关文章

Modbus协议介绍及Modbus TCP

这里写目录标题 一、Modbus起源1.起源2.分类3.优势4.应用场景5.ModbusTCP特点⭐⭐⭐ 二、Modbus TCP协议格式1.报文头2.寄存器3.功能码4.协议包书写模板总结 一、Modbus起源 1.起源 Modbus由Modicon公司于1979年开发,是一种工业现场总线协议标准。 Modbus通信协议…

网络存储解决方案:选择与配置

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

03MyBatis-Plus中的常用注解

常用注解 TableName MyBatis-Plus根据BaseMapper中指定的泛型(实体类型名)确定数据库中操作的表,如果根据实体类型名找不到数据库中对应的表则会报表不存在异常 //向表中插入一条数据 Test public void testInsert(){User user new User(null, "张三", 23, "…

基于Java+SpringBoot+Vue+uniapp点餐小程序(亮点:协同过滤算法、会员系统,购物车结算、在线聊天)

校园点餐小程序 一、前言二、我的优势2.1 自己的网站2.2 自己的小程序(小蔡coding)2.3 有保障的售后2.4 福利 三、开发环境与技术3.1 MySQL数据库3.2 Vue前端技术3.3 Spring Boot框架3.4 微信小程序 四、功能设计4.1 系统功能结构设计4.2 主要功能描述 五…

【操作系统】深入浅出死锁问题

死锁的概念 在多线程编程中,我们为了防止多线程竞争共享资源而导致数据错乱,都会在操作共享资源而导致数据错乱,都会在操作共享资源之前加上互斥锁,只有成功获得到锁的线程,才能操作共享资源,获取不到锁的…

Python新手入门

文章目录 概要python代码运行结果小结 概要 以下内容为python各种输出语句的语法! python代码 # 标准化输出 print("这是标准化输出!")# 格式化输出 print("这是第1种%s"%"格式化输出!") print("这是第…

牛客小白月赛 78

比赛地址 : 牛客小白月赛78 A.几何糕手 题目链接 : 几何糕手 题面 : 思路 : 数学模拟题; 最大面积就是在a与b成一条直线的情况下&#xff1b; so : 输出pi * (ab) * (ab)即可 注意 : 注意精度!!! 代码 : #include<iostream> #include<algorithm> u…

STM32--PWR电源控制

文章目录 PWR电源电源管理器上电复位&#xff08;POR&#xff09;和掉电复位&#xff08;PDR&#xff09; 可编程电压监测器&#xff08;PVD&#xff09;低功耗模式睡眠模式停止模式待机模式 睡眠模式工程停止模式待机模式 PWR STM32的PWR模块是其电源管理系统的核心部分&…

JDK12特性

文章目录 JAVA12概述语法层次的改变switch 表达式(预览) API层次的改变支持数字压缩格式化String新方法Files新增mismatch方法 关于GC的特性Shenandoah GC可中断的 G1 Mixed GC增强G1 JAVA12概述 2019年3月19日&#xff0c;java12正式发布了&#xff0c;总共有8个新的JEP(JDK …

005-第一代光电小工具(一)

第一代光电小工具(一) 文章目录 第一代光电小工具(一)项目介绍大致原理描述核心控件QCustomPlot关于QCustomPlot 播放音频软件截图 关键字&#xff1a; Qt、 Qml、 QCustomPlot、 曲线、 SQLite 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&…

【Spring Boot】Spring—加载监听器

这里写目录标题 前言加载监听器执行run方法加载配置文件封装Node调用构造器思考 前言 前几天的时候&#xff0c;项目里有一个需求&#xff0c;需要一个开关控制代码中是否执行一段逻辑&#xff0c;于是理所当然的在yml文件中配置了一个属性作为开关&#xff0c;再配合nacos就可…

Prometheus黑盒测试模块,监控TCP端口+ HTTP/HTTPS路由状态

文章目录 一、黑盒测试使用场景二、安装blackbox-exporter三、监控TCP端口四、监控HTTP/HTTPS路由五、最后分享几款Grafana模板 一、黑盒测试使用场景 官方下载地址 blackbox-exporter是Prometheus官方提供的一个黑盒测试的解决方案&#xff0c;可用于以下使用场景&#xff1a…

LLaMA参数微调方法

1.Adapter Tuning&#xff1a;嵌入在transformer中 新增了一个名为adapter的结构&#xff0c;其核心思想是保持模型其他原始参数不变&#xff0c;只改变adapter的参数&#xff0c;其结构如下图所示&#xff1a; 1.在每一个transformer模块最后都加入一层adapter。 2.adapter首…

Valine表白动态心跳源码

动态心跳源码 给前女友表白写的网页现在用不着喽 &#xff08;主要功能&#xff09; 记录在一起的时长QQ头像自动同步集成随机古诗词Valine留言评论&#xff08;Valine是一款快速、简洁且高效的无后端评论系统&#xff09; 出售源码&#xff1a;50&#xff08;联系方式在图中…

C# Onnx Yolov8 Pose 姿态识别

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System…

HTTP响应详解, HTTP请求构造及HTTPS详解

HTTP响应详解 认识 "状态码" (status code) 状态码表示访问一个页面的结果 . ( 是访问成功 , 还是失败 , 还是其他的一些情况 ...). 以下为常见的状态码 . 200 OK 这 是一个最常见的状态码, 表示访问成功 . 抓包抓到的大部分结果都是 200 例如访问搜狗…

差分方程模型:兔子繁殖问题(斐波拉契数列)

背景 兔子出生后两个月就能生小兔子&#xff0c;如果每月生一次且恰好生一对小兔子&#xff08;雌性各一只&#xff09;&#xff0c;且出生的兔子都能成活。试问&#xff1a;由一对小兔子开始&#xff0c;一年后有多少对兔子&#xff0c;两年后呢&#xff1f; 【问题分析】 当…

【深度学习】Windows配置深度学习环境

0.前提 OS&#xff1a;Windows 10&#xff08;Windows 11也可&#xff09; CPU&#xff1a;i5-8300H GPU&#xff1a;NVIDIA-GTX1060 Python3.9.8 Pycharm2020-pro 参考博客&#xff1a; Anaconda超详细安装教程&#xff08;Windows环境下&#xff09; cuda安装以及conda安装…

系统架构设计师(第二版)学习笔记----信息系统基础

【原文链接】系统架构设计师&#xff08;第二版&#xff09;学习笔记----信息系统基础 文章目录 一、信息系统概述1.1 信息系统的5个基本功能1.2 信息系统发展阶段1.3 初始阶段的主要特点1.4 传播阶段的主要特点1.5 控制阶段的主要特点1.6 集成阶段的主要特点1.7 信息系统的种类…

Java————形参和实参

方法的形参相当于数学函数中的自变量&#xff0c;比如&#xff1a; Java中方法的形参就相当于sum函数中的自变量n&#xff0c; 用来接收sum函数在调用时传递的值的。 形参的名字可以随意取&#xff0c;对方法都没有任何影响&#xff0c; 形参只是方法在定义时需要借助的一个变…