提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • Abstract
  • Introduction
  • Matplotlib.animation
  • Physics model and Code
  • Summary

Abstract

本文用于记录,使用 python + matplotlib 库绘制模拟动画的个人笔记和经验总结。
使用 matplotlib.animation.FuncAnimation 绘制斜抛运动模拟动画。

Introduction

通常而言,对于数据的可视化呈现多以静态图主,如散点图,折线图等。这类图可用 matplotlib 库或者 seaborn 库中的对应方法实现绘制。比较好奇的是,如何用 python 绘制动态图?


上网一顿手忙脚乱,发现 matplotlib 官网文档上,就有动图的案例1。其中使用的是 matplotlib.animation 这个类。接下来我们就研究一下这个类的方法,以及应用一个简单的物理斜抛模型来进行测试。

Matplotlib.animation

先简单记录一下 matplotlib.animation:

由继承图可知,animation 类中主要由 ArtistAnimation2 和 FuncAnimation3 这两个子类继承。二者的原理(API接口)略有不同。前者是预先给定一系列固定的artist对象,再生成动画;后者则是通过反复调用我们预先给定的某个 “func” 函数,来生成模拟动画。通俗来讲,(个人理解)即是,ArtistAnimation 是类似动画片(幻灯片),预先给定每一帧的数据,然后再让画面动起来;而 FuncAnimation 则类似实时计算,实时生成动画。

本文中我们先试用 FuncAnimation3

其中几个主要参数:

  • fig:传入你的 figure 对象
  • func:传入你的模型函数,理解为某个时间依赖的函数,例如 f(r,t)f(r,t)f(r,t)
  • frames:即帧数,传入时间(序列) t
  • init_func:初始化一些参数

Physics model and Code

方便起见 (懒,用简单的) ,模拟斜抛运动。

运动方程为:
{x=v0sin⁡(θ)ty=v0cos⁡(θ)t−gt22\begin{cases} x = v_0 \sin \left( \theta \right) t \\ y = v_0 \cos \left( \theta \right) t - \frac{gt^2}{2}\\ \end{cases} {x=v0​sin(θ)ty=v0​cos(θ)t−2gt2​​

python 实现:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation%matplotlib qt5
# 这里我用的是jupyter, 加上这一行,使模拟动画能以独立窗口的形式呈现。
# 若用 inline 模式,似乎会出问题。
# 运动方程
def data_generate(t, v0, theta):x = v0 * np.cos(theta) * ty = v0 * np.sin(theta) * t - 0.5 * g * t * treturn x, y# 模型 func
def model(t, v0, theta):x, y = data_generate(t, v0, theta)x_posi.append(x)y_posi.append(y)line.set_data(x_posi, y_posi)point.set_data(x, y)return line, point# 初始化画布参数
def init():ax.set_xlim(-1, 20)ax.set_ylim(-20, 10)del x_posi[:]del y_posi[:]line.set_data(x_posi, y_posi)point.set_data(x_posi, y_posi)return line, point# 设置初始条件
v0 = 10 # m/s
theta = np.radians(45) # rad
g = 9.8 # m/s2x_posi, y_posi = [], []
fig, ax = plt.subplots()
line, = ax.plot([], [], ',-')
point, = ax.plot([], [], '.')t = np.linspace(0, 5, 50)ani = animation.FuncAnimation(fig, model, frames=t, init_func=init,fargs=(v0, theta), repeat=False)
plt.show()
# 保存
ani.save('xpyd.gif', writer='imagemagick')

Summary

本文只用了 FuncAnimation 类,而 ArtistAnimation 的运用,下篇 blog 再更新。
代码根据文档中案例修修改改,举一反三。
最后的结果动图中坐标轴没画,以及一些细节改天再更新吧。


  1. https://matplotlib.org/stable/gallery/index.html#animation ↩︎

  2. https://matplotlib.org/stable/api/_as_gen/matplotlib.animation.ArtistAnimation.html ↩︎

  3. https://matplotlib.org/stable/api/_as_gen/matplotlib.animation.FuncAnimation.html ↩︎ ↩︎

Python + matplotlib.animation 模拟斜抛运动动画(含完整代码)相关推荐

  1. python matplotlib animation制作世界人口变动动画

    python matplotlib animation制作世界人口变动动画 主要利用animation 做了个世界人口动画,数据从网上下载的.做成json格式的.读入pandas.没有放数据, 只是弄 ...

  2. matlab模拟斜抛运动60,大学物理教学改革论文,关于大学物理教学方法改革-Matlab的妙用相关参考文献资料-免费论文范文...

    导读:本文是一篇关于大学物理教学改革论文范文,可作为相关选题参考,和写作参考文献. (1.长江师范学院大学物理教研室 重庆 408100, 2.内蒙古工业大学 理学院物理系 内蒙古呼和浩特 01005 ...

  3. python飞机大战,感受python的乐趣(详细中文解读,含完整代码)

    python飞机大战 本文章代码是根据<python编程从入门到实践>(第2版)编写而成. 1.外星人部分代码 import pygame from pygame.sprite impor ...

  4. 三维场景中斜抛运动顶点的生成

    三维场景中斜抛运动顶点的生成 1 算法思想-斜抛运动 2 代码 3 参考文献 1 算法思想-斜抛运动 2 代码 void getparabola_vertex_2(glm::vec3 _Point, ...

  5. android金币动效_Android 仿余额宝数字跳动动画效果完整代码

    一:想都不用想的,有图有真相,看着爽了,在看下面源码 二:实例源码分析 ①:首先定义接口 package com.demo.tools.view; /** * 数字动画自定义 * * @author ...

  6. android 文字跳动动画,Android 仿余额宝数字跳动动画效果完整代码

    Android 仿余额宝数字跳动动画效果完整代码 发布时间:2020-08-24 06:55:30 来源:脚本之家 阅读:120 作者:曾淘 一:想都不用想的,有图有真相,看着爽了,在看下面源码 二: ...

  7. 老男孩Python自动化开发12期完整版(含作业代码课件)

    老男孩Python自动化开发12期完整版(含作业代码课件) 链接:https://pan.baidu.com/s/1zCKn_VjstbCfTYCHCBKZgQ 密码:zujz 转载于:https:/ ...

  8. Python批量处理大量excel数据(含完整代码)

    Python批量处理excel数据(含完整代码) pandas库可以有效的处理excel.csv和txt文件,并能多格式将数据重新保存为excel.csv和txt文件. 一.导入数据 利用pandas ...

  9. 【动手教你学故障诊断:Python实现Tensorflow+CNN深度学习的轴承故障诊断(西储大学数据集)(含完整代码)】

    项目名称 动手教你学故障诊断:Python实现基于Tensorflow+CNN深度学习的轴承故障诊断(西储大学数据集)(含完整代码) 项目介绍 该项目使用tensorflow和keras搭建深度学习C ...

最新文章

  1. 安装和使用Smokeping(二)
  2. localhost 和 127.0.0.1
  3. oracle 自动补全函数,Oracle自我补充之trunc()函数的使用方法
  4. 四则运算表达式求值(栈的应用)
  5. TreeMap集合特点、排序原理
  6. pycharm cant open file_PyCharm
  7. C++ I/O 流 格式控制(上)
  8. matlab 小波启发式阈值滤波,小波阈值去噪
  9. opencv 绘制图像轮廓
  10. swoole各种服务器初步搭建
  11. MYSQL获取自增ID的四种方法
  12. 网易云数据库架构设计实践
  13. 知名公司GitHub官网
  14. 阿里 Lindorm 数据库联手 Hightopo ,开启工业物联超融合存储模式
  15. 大学十年(一个程序员的路程)(林锐博士)《1----9》【林锐的大学10年】
  16. java一个球左右躲避障碍_java 飞机躲避小游戏分析及实现[源码][附图]
  17. rimraf与windows的rmdir简单使用命令方法
  18. Linux-5.10源代码之网络系统简介:
  19. NVIDIA TensorRT (python win10)安装成功分享
  20. valist的使用方法(队可变参数的处理)

热门文章

  1. 【隧道篇 / IPsec】(5.6) ❀ 02. IPsec 对宽带的要求 ❀ FortiGate 防火墙
  2. QListWidget的QSS用法
  3. 初识Android framework层
  4. [补档]从OI学麻将
  5. FPGA开发之错误集锦(一)
  6. 加载datalodaer 调用 __getitem__方法验证
  7. 谈我的一个项目:心里FM心里电台
  8. 用Python写一个自动关机程序
  9. 22事务(TCL) ——MySQL
  10. RGBA代表什么意思?