• matplotlib简单的新手教程和动画


    做数据分析,首先是要熟悉和理解数据,所以掌握一个趁手的可视化工具是很重要的,否则对数据连个主要的感性认识都没有,怎样进行下一步的design

    点击打开链接

    还有一个非常棒的资料  Matplotlib Tutorial(译)

    使用python绘制动态图的四个栗子:

    # -*- coding: utf-8 -*-    
      
    import numpy as np  
    import matplotlib.pyplot as plt  
    import matplotlib.animation as animation  
      
    fig = plt.figure()  
    axes1 = fig.add_subplot(111)  
    line, = axes1.plot(np.random.rand(10))  
      
    #由于update的參数是调用函数data_gen,所以第一个默认參数不能是framenum   
    def update(data):  
        line.set_ydata(data)  
        return line,  
    # 每次生成10个随机数据   
    def data_gen():  
        while True:  
            yield np.random.rand(10)  
      
    ani = animation.FuncAnimation(fig, update, data_gen, interval=2*1000)  
    plt.show()  
    

    第二个样例使用list(metric),每次从metric中取一行数据作为參数送入update中:

    import numpy as np  
    import matplotlib.pyplot as plt  
    import matplotlib.animation as animation  
      
    start = [1, 0.18, 0.63, 0.29, 0.03, 0.24, 0.86, 0.07, 0.58, 0]  
      
    metric =[[0.03, 0.86, 0.65, 0.34, 0.34, 0.02, 0.22, 0.74, 0.66, 0.65],  
             [0.43, 0.18, 0.63, 0.29, 0.03, 0.24, 0.86, 0.07, 0.58, 0.55],  
             [0.66, 0.75, 0.01, 0.94, 0.72, 0.77, 0.20, 0.66, 0.81, 0.52]  
            ]  
      
    fig = plt.figure()  
    window = fig.add_subplot(111)  
    line, = window.plot(start)  
    #假设是參数是list,则默认每次取list中的一个元素,即metric[0],metric[1],...   
    def update(data):  
        line.set_ydata(data)  
        return line,  
      
    ani = animation.FuncAnimation(fig, update, metric, interval=2*1000)  
    plt.show()  
    

    第三个样例:

    import numpy as np  
    from matplotlib import pyplot as plt  
    from matplotlib import animation  
      
    # First set up the figure, the axis, and the plot element we want to animate   
    fig = plt.figure()  
    ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))  
    line, = ax.plot([], [], lw=2)  
      
    # initialization function: plot the background of each frame   
    def init():  
        line.set_data([], [])  
        return line,  
      
    # animation function.  This is called sequentially   
    # note: i is framenumber   
    def animate(i):  
        x = np.linspace(0, 2, 1000)  
        y = np.sin(2 * np.pi * (x - 0.01 * i))  
        line.set_data(x, y)  
        return line,  
      
    # call the animator.  blit=True means only re-draw the parts that have changed.   
    anim = animation.FuncAnimation(fig, animate, init_func=init,  
                                   frames=200, interval=20, blit=True)  
      
    #anim.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264'])   
      
    plt.show()


    第四个样例:

    # -*- coding: utf-8 -*-   
       
    import numpy as np  
    import matplotlib.pyplot as plt  
    import matplotlib.animation as animation  
      
    # 每次产生一个新的坐标点   
    def data_gen():  
        t = data_gen.t  
        cnt = 0  
        while cnt < 1000:  
            cnt+=1  
            t += 0.05  
            yield t, np.sin(2*np.pi*t) * np.exp(-t/10.)  
    data_gen.t = 0  
      
    # 画图   
    fig, ax = plt.subplots()  
    line, = ax.plot([], [], lw=2)  
    ax.set_ylim(-1.1, 1.1)  
    ax.set_xlim(0, 5)  
    ax.grid()  
    xdata, ydata = [], []  
      
    # 由于run的參数是调用函数data_gen,所以第一个參数能够不是framenum:设置line的数据,返回line   
    def run(data):  
        # update the data   
        t,y = data  
        xdata.append(t)  
        ydata.append(y)  
        xmin, xmax = ax.get_xlim()  
      
        if t >= xmax:  
            ax.set_xlim(xmin, 2*xmax)  
            ax.figure.canvas.draw()  
        line.set_data(xdata, ydata)  
      
        return line,  
          
    # 每隔10秒调用函数run,run的參数为函数data_gen,   
    # 表示图形仅仅更新须要绘制的元素   
    ani = animation.FuncAnimation(fig, run, data_gen, blit=True, interval=10,  
        repeat=False)  
    plt.show()  
    

    最后一个:

    # -*- coding: utf-8 -*-   
    import numpy as np  
    import matplotlib.pyplot as plt  
    import matplotlib.animation as animation  
      
    #第一个參数必须为framenum   
    def update_line(num, data, line):  
        line.set_data(data[...,:num])  
        return line,  
      
    fig1 = plt.figure()  
      
    data = np.random.rand(2, 15)  
    l, = plt.plot([], [], 'r-')  
    plt.xlim(0, 1)  
    plt.ylim(0, 1)  
    plt.xlabel('x')  
    plt.title('test')  
      
    #framenum从1添加大25后,返回再次从1添加到25,再返回...   
    line_ani = animation.FuncAnimation(fig1, update_line, 25,fargs=(data, l),interval=50, blit=True)  
      
    #等同于   
    #line_ani = animation.FuncAnimation(fig1, update_line, frames=25,fargs=(data, l),   
    #    interval=50, blit=True)   
      
    #忽略frames參数,framenum会从1一直添加下去知道无穷   
    #因为frame达到25以后,数据不再改变,所以你会发现到达25以后图形不再变化了   
    #line_ani = animation.FuncAnimation(fig1, update_line, fargs=(data, l),   
    #    interval=50, blit=True)   
      
    plt.show()  
    





  • 相关阅读:
    重置 Mac 上的 NVRAM 或 PRAM
    为什么我的mac插入耳机耳机没有声音呢?
    Redis 实现安全队列
    设计模式之十三:适配器模式(Adapter)
    关于cocos2dx手游lua文件加密的解决方式
    Django中载入js和css文件
    CCNA 例题精选
    JNI/NDK开发指南(四)——字符串处理
    error when loading the sdk 发现了元素 d:skin 开头无效内容
    Webx学习(一)
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4594523.html
Copyright © 2020-2023  润新知