python多线程怎么实现动态图绘制
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,今天小编给大家分享一下python多线程怎么实现动态图绘制的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我
千家信息网最后更新 2025年11月08日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安全错误
数据库的锁怎样保障安全
酒店需要做网络安全吗
数据库中字段是空格算null吗
检察机关网络安全工作总结
华勤的软件开发的项目经理工资
关于预防网络安全的视频
联网提示代理服务器有问题
辽宁锦州网络安全竞赛
龙华智付软件开发
订单的数据库三线表如何画
深圳地铁软件开发
my sql 建立数据库
电子科技大学互联网
网球拍数据库
高风险社区数据库
无锡小程序软件开发哪家好
简述计算机网络技术分为几类
网络安全合格证变更
共青团网络安全管理制度
安徽速聘优选网络技术有限公司
服务器数据安全标准
根据网络安全的手抄报
软件开发就是编制程序
我国网络安全保护的方针
sql数据库怎么导出csv数据
丽水网络安全准入控制价格
2020年网络安全吗
微信二维码服务器不显示
数据库是数据库应用系统吗
医院无密码的网络安全吗
一败涂地一直显示连接服务器