zoukankan      html  css  js  c++  java
  • python: matplotlib.pyplot 制作动图

    jupyter notebook很好用,写文字和公式用markdown,作图用python,都在一个文件里,需要的时候就把这个笔记转成pdf,非常轻松。但是我以前一直用gnuplot,没怎么用过python作图,所以有心情的时候就玩一玩。最好玩的是动图,所以今天试着做了一个利萨如图形。在网上找了模板:https://blog.csdn.net/ouening/article/details/84175396 ,把每个语句弄清楚了,然后做了一点修改。
    matplotlib.animation.FuncAnimation是核心,这个函数调用画布、初始桢画图函数、后续每一帧画图函数,生成动图。
    代码如下:


    %matplotlib qt5
    # 改变渲染方式,自动弹出动图,显示在jupyter notebook之外。
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.animation import FuncAnimation

    fig, ax = plt.subplots() # 创建画布,并且在画布上创建一个图片对象 ax
    t = np.linspace(0, 2np.pi, 300) # 参数list
    xdata, ydata = 2
    np.sin(2t), 5np.cos(3*t) # x坐标list, y坐标list
    ball, = plt.plot([], [], linestyle='None',marker='o',
    markersize=10,markeredgecolor='k',
    color='orange',markeredgewidth=2) # 定义一个图:只有一个点,这个点circle画
    ln, = plt.plot([], [], linestyle = '--', color = 'blue')
    #定义一条曲线,即利萨如曲线
    def init():
    ax.set_xlim(-2.2, 2.2) #定义 x, y 轴坐标范围
    ax.set_ylim(-5.2, 5.2)
    return ln, #没有理解为什么需要加个逗号

    def update(frame): # frame 是 frames = np.arange(1,300) 中的元素值
    ln.set_data(xdata, ydata) #每桢都画上整条利萨如曲线
    ball.set_data([xdata[frame]], [ydata[frame]]) #每桢只画1个小球
    return ln, ball,

    ani = FuncAnimation(fig, update, frames=np.arange(1,300),
    init_func=init, blit=True)
    #在画布 fig 上,调用 init_func, 然后一次调用 update( frames[] )
    plt.show()
    ani.save("利萨如.mp4",fps=60) # 储存文件,fps: frame per sec


    效果如下:
    image
    总结:大概所有动图的思路都是一样的,控制一个序列,让电脑自动生成每一帧,然后串起来完事。FuncAnimation打包这些操作。所以只需要了解这个函数,其他动图就是相似地进行操作了。

  • 相关阅读:
    (转)Esri微博地址收录
    使用liquibasemavenplugin实现持续数据库集成
    CenOS系统中安装Tomcat7并设置为自启动服务
    Androidx86虚拟机安装配置全攻略
    jdk8根据某一属性去重方法 Collectors.collectingAndThen
    [转]恶心的C语言strtok函数
    人生七日忠告 人生征途须记
    VTK中二维Delaunay三角剖分
    Python编程题41原地反转字符串
    Python编程题42除自身以外元素的乘积
  • 原文地址:https://www.cnblogs.com/luyi07/p/14558977.html
Copyright © 2011-2022 走看看