前言

想写数据动态可视化很久了,但是网上竟然没有一份能直接用的代码,昨天终于狠下心来死啃了一波开发者文档搞定了这部分,贴一篇blog记录一下希望可以帮到你。

思路

动图的核心函数是matplotlib.animation.FuncAnimation,基本用法:

anim = animation.funcanimation(fig, animate, init_func=init, frames=100, interval=20, blit=true)
# fig: 是我们创建的画布
# animat: 是重点,是我们每个时刻要更新图形对象的函数,返回值和init_func相同
# init_func: 初始化函数,其返回值就是每次都要更新的对象,
#    告诉FuncAnimation在不同时刻要更新哪些图形对象
# frames: 相当于时刻t,要模拟多少帧图画,不同时刻的t相当于animat的参数
# interval: 刷新频率,毫秒
# blit: blit是一个非常重要的关键字,它告诉动画只重绘修改的部分,结合上面保存的时间,
#    blit=true会使动画显示得会非常非常快

动图绘制的关键是动态更新数据并刷新图像,更新数据需要写一个animat函数,看具体实现:

实现

给出代码及对应注释,你应该会秒懂:

# -*-coding:utf-8-*-
import random
from matplotlib.backends.backend_agg import FigureCanvas
from matplotlib import pyplot as plt
from matplotlib import animation
import numpy as np
import seaborn as sns
from matplotlib.image import imreadgesture_i = [0] * 2200
gesture_q = [0] * 2200
acc_first = [0] * 6
acc_second = [0] * 6acc_first_max_index = 0
acc_second_max_index = 0
acc_first_max = 0
acc_second_max = 0cur_data_count = 0update_first_flag = False
update_second_flag = False
name_list = ["Static", "Approach", "Apart", "Click", "Flip", "Circle"]# 创建画布,包含4个子图
fig = plt.figure(figsize=(15, 10))bgimg=imread("bac2.jpg")#设置背景图片
fig.figimage(bgimg,resize=True)#设置窗口自适应(背景图片)ax1 = fig.add_subplot(2, 2, 1)
ax1.set_facecolor('none')#设置该子图背景透明,其他子图同理ax2 = fig.add_subplot(2, 2, 3)
ax2.set_facecolor('none')ax3 = fig.add_subplot(2, 2, 2)
ax3.set_facecolor('none')ax4 = fig.add_subplot(2, 2, 4)
ax4.set_facecolor('none')# 绘制初始图形
bar1 = ax3.bar(range(len(acc_first)), acc_first, color='rgb', tick_label=name_list)bar2 = ax4.bar(range(len(acc_first)), acc_first, color='rgb', tick_label=name_list)x = np.arange(0, 2200, 1)  # x轴ax1.set_ylim(-1, 1)#设置y轴范围为-1到1
line1, = ax1.plot(x, gesture_i,color='coral')ax2.set_ylim(-1, 1)
line2, = ax2.plot(x, gesture_q,color='coral')#初始化函数
def init():# 构造开始帧函数init# 改变y轴数据,x轴不需要改line1.set_ydata(gesture_i)line2.set_ydata(gesture_q)bar1 = ax3.bar(range(len(acc_first)), acc_first, color='rgb', tick_label=name_list)bar2 = ax4.bar(range(len(acc_second)), acc_second, color='rgb', tick_label=name_list)ax1.set_xlabel("I")ax2.set_xlabel("Q")return line1, line2, ax1  # 注意返回值,我们要更新的就是这些数据#更新图像的函数
def animate(i):#注意这里必须要用global声明,不然可能出现无法动态更新数据的情况global gesture_iglobal gesture_qglobal update_first_flagglobal update_second_flagline1.set_ydata(gesture_i)ax3.cla()bar1 = ax3.bar(range(len(acc_first)), acc_first, color='rgb', tick_label=name_list)ax3.legend()ax4.cla()bar2 = ax4.bar(range(len(acc_second)), acc_second, color='rgb', tick_label=name_list)ax4.legendreturn line1, line2, ax1def draw_view():
# 调用FuncAnimation函数生成动画。参数说明:
# fig 进行动画绘制的figure
# func 自定义动画函数,即传入刚定义的函数animate
# frames 动画长度,一次循环包含的帧数
# init_func 自定义开始帧,即传入刚定义的函数init
# interval 更新频率,以ms计
# blit 选择更新所有点,还是仅更新产生变化的点。应选择True,但mac用户请选择False,否则无法显示动画ani = animation.FuncAnimation(fig=fig,func=animate,frames=100,init_func=init,interval=100,blit=False)plt.show()if __name__ == '__main__':draw_view()

说明:实现动态数据可视化的思路是将绘制图像所用的数据写成全局变量,然后动态更新你的数据,UI层会一帧一帧地刷新图像,这样只要你的数据在变,图像就会是变化的,给一张效果图:

使用python matplotlib实现动图绘制相关推荐

  1. python怎么变成动图_python可以做动图吗

    ImageMagick 是一套功能强大.稳定而且开源的工具集和开发包,可以用来读.写和处理超过200种基本格式的图片文件,包括PNG,JPEG,GIF,HEIC,TIFF,DPX,EXR,WebP,P ...

  2. python画散点图程序-Python散点图与折线图绘制过程解析

    这篇文章主要介绍了Python散点图与折线图绘制过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在数据分析的过程中,经常需要将数据可视化,目 ...

  3. python+matplotlib对柿子图的彩色和灰色直方图统计

    python+matplotlib对柿子图的彩色和灰色直方图统计 前言 代码 有疑待查 参考链接 前言 最近在对柿子图统计时,遇到了np.histogram函数的参数bins的用法不理解,查找了大量资 ...

  4. Matplotlib做动图(基础版)

    今天来用Matplotlib做动图玩玩,怎么让静图变为动图呢?我们现在的看到的电影.电视剧一般是24帧的,也就是每秒24幅图.用Matplotlib做动图也是这个原理用一定数量的静图在一定的时间内播放 ...

  5. Python生成gif动图

    Python生成gif动图 调用一个 python 库 imageio 可以轻松实现该功能 安装 pip/pip3 install imageio 步骤 读取静态图到列表中 ,作为 GIF 动图的每一 ...

  6. python怎么变成动图_教你用 Python 生成 GIF 动图 !

    最近啊 ,微信订阅号改变频繁 ,很多读者后台说 :小詹啊 ,我总是容易错过你公号的消息 ,现在没有置顶功能很难过啊 ! 不止你们难过 ,订阅号的作者恐怕更难过 !现在人人公众号时代 ,大家关注的公众号 ...

  7. python如何画动图_python之matplotlib画图教程(3)--如何画动图

    上一篇我们说好了,要给出整套源码,为了不占正文的篇幅,我会在文末贴出.放心,不是让你去关注公众号.因为,我并没有.. 之前我们聊了怎么画圆以及直线,我还是建议你能抽出10分钟把前面的文章先看了,因为这 ...

  8. python台风动图绘制_让数据动起来——三维动图剖析“海神”

    原标题:让数据动起来--三维动图剖析"海神" "海神"一路北来,影响我国东北地区 我们也让数据动起来,剖析它的内在. 近半个月来,三个台风接连影响我国东北地区, ...

  9. python制作gif动图_怎样用Python制作好玩的GIF动图

    原标题:怎样用Python制作好玩的GIF动图 作者: 景略集智 https://jizhi.im/blog/post/pytogif 程序员共读整理发布,转载请联系作者获得授权 之前我们分享过用Py ...

最新文章

  1. 累加结合律,交换律,分配律的一个例子
  2. esxi宿主机的本地存储-非活动
  3. 计算机基础知识自考真题,自考《计算机应用基础》基础试题
  4. python boolean_Python成为专业人士笔记-Boolean 布尔操作符研究
  5. python dropna失败_使用Python部署机器学习模型的10个实践经验
  6. 列表视图案例2——显示用户列表
  7. python dict 选择第一个、最后一个元素的key或value
  8. ActionScript3文本框字体调整一法
  9. 华为linux版本wifi驱动,华为随身wifi驱动
  10. 常见存储的串口连接管理方法
  11. linux下phylip软件构建NJ树,MEGA软件——系统发育树构建方法(图文讲解)
  12. 【hadoop生态之Hive】Hive的DDL数据定义语言【笔记+代码】
  13. JavaScript(第三天)—爱创课堂专业前端培训
  14. Web代理(HTTP代理)
  15. 嘟嘟牛app算法hook
  16. 信息检索中 (IR) 的评价指标: P@n, MAP, MRR, DCG, NDCG
  17. 仿写微信公众号添加自定义菜单 并给后台存数据
  18. Ubuntu 肉鸡 记
  19. 毕业论文里如何插入图录和表录
  20. 软考高级哪个更容易过

热门文章

  1. 应用计算机行业历史,计算机应用行业:浩历史指引未来 看好
  2. java同一个包是什么意思_java中包到底是什么意思?包访问权限又是什么意思,有C++基础。...
  3. AMBA-ATB spec
  4. 5月12~15在青岛
  5. 【java开发】快速搭建java开发环境(离线开发、在线开发)
  6. 一遍过的刷四史脚本教程
  7. journal 日志管理
  8. vlad用python实现_HF-Net(一)基于NetVLAD的global descriptor的特征提取
  9. JAVA列名无效解决方案,Java-请各位大神指教,我在用MyBatis Generator进行逆向工程时,报“列名无效”错误。...
  10. 九月刚入职字节跳动的测试开发面试题,附答案