python多线程怎么实现动态图绘制
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,今天小编给大家分享一下python多线程怎么实现动态图绘制的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我
千家信息网最后更新 2025年01月18日python多线程怎么实现动态图绘制
今天小编给大家分享一下python多线程怎么实现动态图绘制的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
一、背景
有些情况下,我们面对实时更新的数据,希望能够在一个窗口中可视化出来,并且能够实时更新,方便我们观察数据的变化,从而进行数据分析,例如:绘制音频的波形,绘制动态曲线等,下面介绍使用matplotlib结合多线程绘制动态图,希望能帮助到有需要的朋友。
遇到的场景:最近刚好在学习人工智能中的遗传算法,并且使用该算法求解TSP,了解这个算法的朋友知道这个算法是通过不断迭代,寻找适应度大的最优解,为了了解迭代过程中适应度的变化,我希望能够实时更新迭代过程中的适应度,将其可视化出来(数据量不断增大)
二、步骤
1、使用matplotlib绘制动态图
工具:matplotlib.animation
2、创建一个线程用于更新数据
threading
三、代码框架
# Author: 浅若清风cyf# Date: 2020/12/11import threadingimport matplotlib.pyplot as pltimport matplotlib.animation as animationimport matplotlib.lines as lineimport numpy as npCHUNK = 2048 # 初始数据量data=np.random.normal(0,1,CHUNK) # 存放数据,用于绘制图像,数据类型可为列表# 定义画布fig = plt.figure()ax = plt.subplot(111,ylim=(0,5))line = line.Line2D([], []) # 绘制直线# 初始化图像def plot_init(): ax.add_line(line) return line, # 必须加逗号,否则会报错(TypeError: 'Line2D' object is not iterable)# 更新图像(animation会不断调用此函数刷新图像,实现动态图的效果)def plot_update(i): global data # data为全局变量 data_copy = data.copy() # 为避免线程不同步导致获取到的data在绘制图像时被更新,这里复制数据的副本,否则绘制图像的时候可能会出现x和y的数据维度不相等的情况 x_data=np.arange(0,data_copy.shape[0],1) # x轴根据y轴数据自动生成(可根据需要修改) ax.set_xlim(0,data_copy.shape[0]) # 横坐标范围(横坐标的范围和刻度可根据数据长度更新) ax.set_title("title",fontsize=8) # 设置title line.set_xdata(x_data) # 更新直线的数据 line.set_ydata(data_copy) # 更新直线的数据 # 大标题(若有多个子图,可为其设置大标题) plt.suptitle('Suptitle',fontsize=8) # 重新渲染子图 ax.figure.canvas.draw() # 必须加入这一行代码,才能更新title和坐标!!! return line, # 必须加逗号,否则会报错(TypeError: 'Line2D' object is not iterable)# 绘制动态图ani = animation.FuncAnimation(fig, # 画布 plot_update, # 图像更新 init_func=plot_init, # 图像初始化 frames=1, interval=30, # 图像更新间隔 blit=True)# 数据更新函数def dataUpdate_thead(): global data # 为了方便理解代码,这里生成正态分布的随机数据 while True: # 为了方便测试,让数据不停的更新 data=np.random.normal(0,1,CHUNK)# 为数据更新函数单独创建一个线程,与图像绘制的线程并发执行ad_rdy_ev = threading.Event()ad_rdy_ev.set() # 设置线程运行t = threading.Thread(target=dataUpdate_thead, args=()) # 更新数据,参数说明:target是线程需要执行的函数,args是传递给函数的参数)t.daemon = Truet.start() # 线程执行plt.show() # 显示图像(0,1,CHUNK)# 为数据更新函数单独创建一个线程,与图像绘制的线程并发执行ad_rdy_ev = threading.Event()ad_rdy_ev.set() # 设置线程运行t = threading.Thread(target=dataUpdate_thead, args=()) # 更新数据,参数说明:target是线程需要执行的函数,args是传递给函数的参数)t.daemon = Truet.start() # 线程执行plt.show() # 显示图像
以上就是"python多线程怎么实现动态图绘制"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。
数据
更新
线程
图像
函数
动态
参数
知识
算法
篇文章
不断
代码
实时
实时更新
直线
适应度
迭代
内容
情况
朋友
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
外卖软件开发
长沙软件开发驻场公司有哪些
贵州合力共创网络技术有限公司
软件开发如何选mssql
软件开发如何防止错误
网络安全模式一点就卡
删除服务器还能找回来吗
网页搬家数据库怎么解决
泉州市易宝软件开发有限公司
对网络安全工作要求
服务器控制端是什么
服务器如何连接蓝牙音箱
数据库下载网站
我的世界服务器必备指令击杀榜
网络式数据库
宜宾服务器显卡多少钱
服务器结构英文简称
小米2s可以当私人服务器吗
虚拟服务器无法重新启动怎么办
暗黑2 哪个服务器不掉线
应用软件开发面试常问问题
数据库面试自我介绍模板
微软的软件开发工程师证书
ospf如何实现数据库同步
阿里云服务器登录
香港cn2服务器租用
智慧水务网络技术方案
计算机网络技术有没有等级证书
枯草芽孢杆菌数据库有哪些
信创数据库对比分析