• Matplotlib的FuncAnimation中blit的作用


    Matplotlib的FuncAnimation中blit的作用

    一、总结

    一句话总结:

    blit=True:选择更新所有点,还是仅更新产生变化的点。应选择True,但mac用户请选择False,否则无法显示。
    ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128), init_func=init, blit=True, interval=1)
    
    fig:figure对象
    updata:不断更新图像的函数,生成新的xdata和ydata
    frames:不断提供frame给updata用于生成新的xdata和ydata
    init_func=init:初始化函数为init,自定义开始帧。
    interval=1:时间间隔为1ms,interval的单位以ms计算。
    blit=True:选择更新所有点,还是仅更新产生变化的点。应选择True,但mac用户请选择False,否则无法显示。

    二、 Matplotlib的FuncAnimation中blit的作用

    blit=True:选择更新所有点,还是仅更新产生变化的点。应选择True,但mac用户请选择False,否则无法显示。

    三、【Python】动态动画Matplotlib的FuncAnimation使用解析

    转自或参考:【Python】动态动画Matplotlib的FuncAnimation使用解析
    https://blog.csdn.net/See_Star/article/details/104781098

    前言,最近想用pyqt结合python制作音乐可视化播放器,而其中可视化部分上午动态效果我采用了matplotlib中的FuncAnimation

    下面简单说说FuncAnimation部分。


    一 演示1

    1.1 演示效果

    在这里插入图片描述

    1.2 代码

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.animation import FuncAnimation
    
    fig = plt.figure()  # 创建figure对象
    ax = fig.gca(projection='polar')  # 极坐标系
    ax.set_axis_off()  # 取消坐标轴的显示
    ln, = ax.plot([], [])
    
    # 图像初始化
    def init():
        ax.set_xlim(0, 2*np.pi)       # 设定x值范围
        ax.set_ylim(-1, 1)            # 设定y值范围
        xdata = [1,2,3,4]
        ydata = [0, 0, 0, 0]
        ln.set_data(xdata, ydata)
        return ln,
    
    # 图像更新
    def update(frame):
        xdata = [1*frame, 2*frame, 3*frame, 4*frame]
        ydata = [0,0,0,0]
        ln.set_data(xdata, ydata)
        return ln,
    
    ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
                        init_func=init, blit=True, interval=1)
    plt.show()
    

    1.3 代码解析

    ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128), init_func=init, blit=True, interval=1)
    

    fig:figure对象
    updata:不断更新图像的函数,生成新的xdata和ydata
    frames:不断提供frame给updata用于生成新的xdata和ydata
    init_func=init:初始化函数为init,自定义开始帧。
    interval=1:时间间隔为1ms,interval的单位以ms计算。
    blit=True:选择更新所有点,还是仅更新产生变化的点。应选择True,但mac用户请选择False,否则无法显示。

    注意:可以不使用frames部分,更新的数据可在update(frame)内赋值。但update部分的命名必须为 函数名(frame)即使frame这个变量未使用,也不可以删掉。(参考演示2)

    二 演示2

    2.1 演示效果

    在这里插入图片描述

    2.2 代码

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.animation import FuncAnimation
    
    import wave
    import struct
    from scipy.signal import detrend
    
    wf = wave.open('E:/album/欧洲游学/vlog/12仔 - 太一-Lutra(12仔 remix).wav', 'rb')
    fig = plt.figure()
    ax = fig.gca(projection='polar')
    ax.set_axis_off()
    ln, = ax.plot([], [])
    chunk = 1024
    
    
    def init():
        ax.set_ylim(-0.1, 0.1)
        ln.set_data(np.linspace(0, 2 * np.pi, chunk), np.zeros(chunk))
        return ln,
    
    
    def update(frame):
        data = wf.readframes(chunk)
        data_int = struct.unpack(str(chunk * 4) + 'B', data)
        y_detrend = detrend(data_int)
        yft = np.abs(np.fft.fft(y_detrend))
        y_vals = yft[:chunk] / (chunk * chunk * 4)
        ind = np.where(y_vals > (np.max(y_vals) + np.min(y_vals)) / 2)
        y_vals[ind[0]] *= 2
        ln.set_ydata(y_vals)
        return ln,
    
    ani = FuncAnimation(fig, update,
                        init_func=init, blit=True, interval=5)
    plt.show()
    

    三 演示3:参考部分

    参考链接

    3.1 演示效果

    在这里插入图片描述

    3.2 代码

    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.animation import FuncAnimation
    
    fig, ax = plt.subplots()
    xdata, ydata = [], []
    ln, = plt.plot([], [], 'ro')
    
    def init():
        ax.set_xlim(0, 2*np.pi)
        ax.set_ylim(-1, 1)
        return ln,
    
    def update(frame):
        xdata.append(frame)
        ydata.append(np.sin(frame))
        ln.set_data(xdata, ydata)
        return ln,
    
    ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
                        init_func=init, blit=True)
    plt.show()
    
     
    我的旨在学过的东西不再忘记(主要使用艾宾浩斯遗忘曲线算法及其它智能学习复习算法)的偏公益性质的完全免费的编程视频学习网站: fanrenyi.com;有各种前端、后端、算法、大数据、人工智能等课程。
    博主25岁,前端后端算法大数据人工智能都有兴趣。
    大家有啥都可以加博主联系方式(qq404006308,微信fan404006308)互相交流。工作、生活、心境,可以互相启迪。
    聊技术,交朋友,修心境,qq404006308,微信fan404006308
    26岁,真心找女朋友,非诚勿扰,微信fan404006308,qq404006308
    人工智能群:939687837

    作者相关推荐

  • 相关阅读:
    phpstudy apache无法启动的解决办法
    Windows server 2008 快速搭建域环境
    使用netsh来进行端口转发
    基于docker构建测试环境
    [Leetcode] Linked List Cycle
    Hyper-V下安装Ossim系统
    Windows应用替代方案接龙
    图解CISCO 3550忘记密码解决方法
    硬件代理解决用户上网问题
    图->存储结构->数组表示法(邻接矩阵)
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/13861939.html
Copyright © 2020-2023  润新知