python多线程怎么实现动态图绘制

python多线程怎么实现动态图绘制

今天小编给大家分享一下python多线程怎么实现动态图绘制的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    一、背景

    有些情况下,我们面对实时更新的数据,希望能够在一个窗口中可视化出来,并且能够实时更新,方便我们观察数据的变化,从而进行数据分析,例如:绘制音频的波形,绘制动态曲线等,下面介绍使用matplotlib结合多线程绘制动态图,希望能帮助到有需要的朋友。

    python多线程怎么实现动态图绘制

    遇到的场景:最近刚好在学习人工智能中的遗传算法,并且使用该算法求解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多线程怎么实现动态图绘制”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注恰卡编程网行业资讯频道。

    发布于 2022-04-15 22:30:23
    收藏
    分享
    海报
    0 条评论
    35
    上一篇:C#如何实现希尔排序 下一篇:C#怎么实现冒泡排序和插入排序算法
    目录

      推荐阅读

      0 条评论

      本站已关闭游客评论,请登录或者注册后再评论吧~

      忘记密码?

      图形验证码