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 3.12 新特性解析:模式匹配增强与性能优化实战
-
Lightly IDE 深度评测:轻量级 Python 开发工具是否适合团队协作?
-
VS Code 自定义配置:JSON 文件修改、代码片段与任务自动化脚本
-
Python 虚拟环境选择:venv、conda、poetry 的适用场景对比
-
PyCharm+GitHub Copilot:Python 开发中 AI 辅助编码的最佳实践
-
PyCharm 无法识别虚拟环境?5 步排查 Python 解释器配置问题
-
数据科学工具链:Jupyter Notebook+RStudio+Python 的协同工作流
-
Python 3.12 新特性:模式匹配增强与性能改进实战
-
Lightly IDE 适合谁?轻量级 Python 开发工具深度评测
-
Python IDE 终极对比:PyCharm vs VS Code vs Jupyter Notebook
-
Python 3.12 新特性解析:模式匹配增强与性能优化实战
-
Lightly IDE 深度评测:轻量级 Python 开发工具是否适合团队协作?
-
VS Code 自定义配置:JSON 文件修改、代码片段与任务自动化脚本
-
Python 虚拟环境选择:venv、conda、poetry 的适用场景对比
-
PyCharm+GitHub Copilot:Python 开发中 AI 辅助编码的最佳实践
-
PyCharm 无法识别虚拟环境?5 步排查 Python 解释器配置问题
-
数据科学工具链:Jupyter Notebook+RStudio+Python 的协同工作流
-
Python 3.12 新特性:模式匹配增强与性能改进实战
-
Lightly IDE 适合谁?轻量级 Python 开发工具深度评测
-
Python IDE 终极对比:PyCharm vs VS Code vs Jupyter Notebook
-
Python 3.12 新特性解析:模式匹配增强与性能优化实战
-
Lightly IDE 深度评测:轻量级 Python 开发工具是否适合团队协作?
-
VS Code 自定义配置:JSON 文件修改、代码片段与任务自动化脚本
-
Python 虚拟环境选择:venv、conda、poetry 的适用场景对比
-
PyCharm+GitHub Copilot:Python 开发中 AI 辅助编码的最佳实践
-
PyCharm 无法识别虚拟环境?5 步排查 Python 解释器配置问题
-
数据科学工具链:Jupyter Notebook+RStudio+Python 的协同工作流
-
Python 3.12 新特性:模式匹配增强与性能改进实战
-
Lightly IDE 适合谁?轻量级 Python 开发工具深度评测
-
Python IDE 终极对比:PyCharm vs VS Code vs Jupyter Notebook