Python利用matplotlib实现制作动态条形图
作者:Python数据挖掘 发布时间:2021-06-11 05:29:15
大家好,本文将分享如何使用matplotlib
制作动态条形图,制作的图很美,这个是我在之前发布的一篇中使用的图片,
效果如下
制作思路
为了方便大家学习,我将不直接进行讲解,而是以我是如何一步步制作的思路来介绍整个过程。
说到用 Python 制作动态图,首先想到的肯定是一些直接拿来就用的库,虽然我没做过,但是我相信一定有且不止一个,搜了一圈后发现有个bar chart race
库看起来不错
毕竟有现成的轮子,只需要填充数据即可,但是研究了一番,正如我之前所说,越好看的图对数据的要求越高,这个动态图的库指定数据必须类似如下格式
即有时间和国家两个维度,通过时间的变化来动态变化数据,但是我的数据很简单,就一列人名一列数据如下
如果再将数据强行修改成该库所需要的格式,花费的功夫将更多!所以果断放弃,回到我熟悉的matplotlib
上,首先很自然的想法就是,根据每一行,写一个循环,每次循环就创建一个条形图。
这个想法是完全可以的,也有很多人这么做了,但是有一个问题就是做出来的效果太难看了,并且每次循环都需要重新生成画布绘图需要一定时间,这也会让最后的动态图显的不连贯。所以稍作尝试后这个思路也被抛弃了。
animation
又经过一番探索后,终于找到一个合适的工具——animation
模块,可以完美的实现我的需求,只需要将你的绘图函数写好,将涉及到的参数空出来,通过FuncAnimation
来更新数据即可。
当然我也是第一次接触,虽了解思路但不清楚具体实现逻辑,所以先从官方拉一个demo来看看整个过程如何实现
fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = ax.plot([], [], 'r-', animated=False)
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)
HTML(ani.to_jshtml())
上面这段代码取自官方文档,并不难读懂,首先创建figure
和axes
,之后将涉及到的数据xdata,ydata
空出来,再用update函数来更新数据并绘图,具体为将数据赋给frames
,通过FuncAnimation
实例传到update
中实现迭代绘图,最后可以使用ipython的内置工具来将动态图展示在notebook中,效果如下
到这里基本上就搞明白整个过程了,下面我们只需要照猫画虎,写一个绘图函数并设计如何更新数据即可,具体如下
解释一下这一大段代码,抛开设置标题、坐标轴等修饰的部分,实际上也只做了一件事通过flag参数来绘制每一行数据。
为什么需分为两段,因为我们图上需要七根柱子,而刚开始的时候只有不到七条数据,所以需要先创建七个空数据,在绘制前七个柱状图时,依次添加,而后面只需要从7开始,删除最早的一个数据,并向后追加一个数据即可,额外需要考虑的是我们需要为每一个数据确定一个颜色,所以还有一列颜色列也需要更新,最终我们的数据如下
在搞定shuang这个绘图函数后,只需要迭代更新数据并展示即可,相关代码如下
其中ani.save()
可以将动图存储为gif,HTML(ani.to_html5_video())
可以将动图保存为mp4,而HTML(ani.to_jshtml())
则是在notebook
中直接查看最终效果(注意第一次运行这里会报错,根据相关提示安装依赖即可),大家可以自己尝试
至于代码中如何添加标题、修改坐标轴、修改注释等操作本文就不在细讲了,最后是制作完成的效果,我个人感觉还不错,也可以导出为高分辨率视频添加bgm制作视频
来源:https://blog.csdn.net/qq_34160248/article/details/127191469
猜你喜欢
- 在继续阅读本文之前,您务必要对我们在本专栏中将要讨论的一些技术有所了解。我们要使用的技术包括:可扩展的样式表语言转换(Extensible
- 实战场景 本篇博客学习字体反爬,涉及的站点是实习 x,目标站点地址直接百度搜索即可。可以看到右侧源码中出现了很多&ldqu
- 一、前言容器使用沙箱机制,互相隔离,优势在于让各个部署在容器的里的应用互不影响,独立运行,提供更高的安全性。本文主要介绍python应用(d
- asp中使用addnew方法添加一条记录后,我们经常使用取得自递增的ID,而使用bookmark很容易实现这样的功能。rs.open&nbs
- 写入Excel中后有显示第一列客户款号总库存这些,开始写在第12行第一列开始写入,一行写入5个,然后再隔12行,再写入下边的数据,图片需要对
- 如何阻止别人非法链接你网站的图片,防盗链?getimage.asp<% Option ExplicitDim&nb
- 1. 用SimpleITK读取dicom序列:import SimpleITK as sitkimport numpy as npimg_p
- 本文实例讲述了Python常见MongoDB数据库操作。分享给大家供大家参考,具体如下:MongoDB 是一个基于分布式文件存储的数据库。由
- 内置函数常用函数1.数学相关•abs(x)abs()返回一个数字的绝对值。如果给出复数,返回值就是该复数的模。>>>pri
- 一、概念说明柱状图(bar chart),从相同的横坐标出发,以不同的数值大小来设定柱子的高度,进而表示无序或有序的定性数据间某个定量指标的
- 一、MatplotlibMatplotlib是Python中众多数据可视化库的鼻祖,其设计风格与20世纪80年代设计的商业化程序语言MATL
- 当你需要一个简单易用的导航菜单得时候。CSS Menu是个不错的选择。相对于Flash/Javascript,他们小巧轻便,而且方便使用。当
- 之前使用beego的http库的时候,有的情况需要下载文件。beego是能实现,但就是有点问题:不支持回调,没法显示下载速度,这在日常开发中
- 1.1全部php生成结构1.2html中嵌套php总结如下:html和php混写规则:php代码必须包在<?php ?>html
- 废话不多说了,直接给大家贴js代码了,具体代码如下所示:<!DOCTYPE html><html><head&
- python版本:3.6+需要模块:flask,pillow需求:开发一个支持多格式图片上传的接口,并且将图片压缩,支持在线预览图片。目录结
- 在照着Tensorflow官网的demo敲了一遍分类器项目的代码后,运行倒是成功了,结果也不错。但是最终还是要训练自己的数据,所以尝试准备加
- 去掉数据重复 增加两个字段 alter TABLE T_Employee Add FSubCompany VARchar(20); ALTE
- 因为工作原因,需要定期清理某个文件夹下面创建时间超过1年的所有文件,所以今天集中学习了一下Python对于本地文件及文件夹的操作。网上 这篇
- 打开php.ini,首先找到file_uploads = on ;是否允许通过HTTP上传文件的开关。默认为ON即是开upload_tmp_