python多线程怎么实现动态图绘制
python多线程怎么实现动态图绘制
今天小编给大家分享一下python多线程怎么实现动态图绘制的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
一、背景
有些情况下,我们面对实时更新的数据,希望能够在一个窗口中可视化出来,并且能够实时更新,方便我们观察数据的变化,从而进行数据分析,例如:绘制音频的波形,绘制动态曲线等,下面介绍使用matplotlib结合多线程绘制动态图,希望能帮助到有需要的朋友。
遇到的场景:最近刚好在学习人工智能中的遗传算法,并且使用该算法求解TSP,了解这个算法的朋友知道这个算法是通过不断迭代,寻找适应度大的最优解,为了了解迭代过程中适应度的变化,我希望能够实时更新迭代过程中的适应度,将其可视化出来(数据量不断增大)
二、步骤
1、使用matplotlib绘制动态图
工具:matplotlib.animation
2、创建一个线程用于更新数据
threading
三、代码框架
#Author:浅若清风cyf#Date:2020/12/11importthreadingimportmatplotlib.pyplotaspltimportmatplotlib.animationasanimationimportmatplotlib.linesaslineimportnumpyasnpCHUNK=2048#初始数据量data=np.random.normal(0,1,CHUNK)#存放数据,用于绘制图像,数据类型可为列表#定义画布fig=plt.figure()ax=plt.subplot(111,ylim=(0,5))line=line.Line2D([],[])#绘制直线#初始化图像defplot_init():ax.add_line(line)returnline,#必须加逗号,否则会报错(TypeError:'Line2D'objectisnotiterable)#更新图像(animation会不断调用此函数刷新图像,实现动态图的效果)defplot_update(i):globaldata#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)#设置titleline.set_xdata(x_data)#更新直线的数据line.set_ydata(data_copy)#更新直线的数据#大标题(若有多个子图,可为其设置大标题)plt.suptitle('Suptitle',fontsize=8)#重新渲染子图ax.figure.canvas.draw()#必须加入这一行代码,才能更新title和坐标!!!returnline,#必须加逗号,否则会报错(TypeError:'Line2D'objectisnotiterable)#绘制动态图ani=animation.FuncAnimation(fig,#画布plot_update,#图像更新init_func=plot_init,#图像初始化frames=1,interval=30,#图像更新间隔blit=True)#数据更新函数defdataUpdate_thead():globaldata#为了方便理解代码,这里生成正态分布的随机数据whileTrue:#为了方便测试,让数据不停的更新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多线程怎么实现动态图绘制”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注恰卡编程网行业资讯频道。
推荐阅读
-
python(中无效的十进制怎么解决 python怎么转换进制)
python怎么转换进制?Python执行二进制转换:1.十进制到二进制(bin)首先,让让我们看看如何将十进制转换成二进制。我...
-
python怎么清除完全相同的行(python splte如何分隔有多个相同符号的str)
pythonsplte如何分隔有多个相同符号的str?str你的string内容str_(相同的符号)执行完了以后再在相同符号的...
-
python(编程控制电脑关机 如何控制电脑关机)
如何控制电脑关机?可以在电脑的运行窗口中输入输入公式,给电脑可以设置自动关机。1.按开快捷键winr然后打开运行窗口。2.在运行窗...
-
python中的特殊标识符(python 中 标识符中可以有逗号吗)
python中标识符中可以有逗号吗?在python语言中合法的标识符是字母、数字以及_,所以我合法的标识符中肯定不能有逗号if...
-
python(excel 提取数据写入新表 python导入excel数据找不到工作簿)
python导入excel数据找不到工作簿?我可以导入数据后找不到工作,不是因为他的工作没有被转移。什么软件可提取并合并Exce...
-
python中字典定义的四种方法(python global关键字的用法详解)
pythonglobal关键字的用法详解?global标志实际上是目的是提示python讲解器,说被其修饰的变量是全局变量。这样...
-
python(array用法 python如何对两个数组做差处理)
python如何对两个数组做差处理?Python中的列表中的元素肯定不能真接相加,减。t最佳的位置的是将列表装换成Python中的...
-
python多行注释符号怎么表示
python多行注释符号怎么表示这篇文章主要介绍“python多行...
-
python支持的操作系统是什么
python支持的操作系统是什么这篇文章主要介绍“python支持...
-
python如何判断列表为空
python如何判断列表为空这篇文章主要介绍“python如何判断...