python - 只需1行命令即可绘制条形动态竞赛图
qiyuwang 2024-10-10 11:29 10 浏览 0 评论
发现一个专门绘制条形竞赛图的工具包:bar_chart_race,该工具包内部调用了matplotlib绘图工具包,可以根据个人需要定制数据条形竞赛图,注意:该工具包不能生成GIF动画图形,如需生成GIF动画图形,请阅读《如何把python绘制的动态图形保存为gif文件或视频》。该工具包有自己的网站和github库,头条文章不支持站外链接,感兴趣的同学可以自己搜索。
使用bar_chart_race工具包绘制动态条形竞赛图的效果多种多样,在以下视频连接,动态条形竞赛图专用工具 bar_chart_race 的用法及效果,其中演示了各种效果及其对应的代码语句,先观看体验一下!
笔者根据bar_chart_race开发者官网提供的英文教程,体验了一把,非常简单易用,把过程简单地写下来,分享给感兴趣的同学们!闲话少说,开始...
绘制条形竞赛图工具包 bar_chart_race 需要 FFmpeg 软件支持
使用工具包 bar_chart_race 必须要有 FFmpeg 软件支持。简单说一下FFMpeg的功能和使用设置,FFMpeg 是一款多媒体工具软件,具有解码、编码、转码、复用和分解复用、流化处理、过滤和播放等功能,支持多种多媒体格式,尤其是一些较老的格式。从官网下载该软件,解压后复制到指定的目录下(最好放在系统盘),官网地址及解压后的内容如下图:
笔者下载并解压后存放的目录,如下图:
其中 ...\bin\ 目录下的 可执行文件 ffmpeg.exe,需要设置环境变量:鼠标右击“我的电脑” > 高级系统设置 > 环境变量 ,弹出如下窗口:
在“administrator的用户变量”中的 path 变量中加入 FFmpeg.exe的路径,如下图:
在“系统变量”中的创建 名称为 “ffmpeg”的变量,ffmpeg.exe 所在的路径为值,如下图:
数据格式
绘制条形竞赛图的数据是pandas的dataframe格式,其中的每一行都代表一个时间单位,每一列都是分类值,可以有时间类型的索引,也可以没有。现在看看本系列文中使用的数据样例,如下图:
样例数据是几个国家连续10天的感染新冠的死亡人数,使用bar_chart
_race 工具包创建条形竞赛图。下文中的编程环境为vscode下的Jupyter notebook,首先安装 bar_chart_race,代码如下:
! pip install bar-chart-race
bar_chart_race 创建条形竞赛图的基本示例
仅使用bar_chart_race中的主函数 bar_chart_race()即可创建数据的条形竞赛图,调用该函数默认返回值为 HTML格式的动画。代码如下:
import bar_chart_race as bcr
df = bcr.load_dataset('covid19_tutorial')
bcr.bar_chart_race(df)
其中 df = bcr.load_dataset('covid19_tutorial') 这一句,函数内置了下载 covid19_tutorial 数据的网址,这里只是方便起见就直接使用了,个人数据只要转换为dataframe格式即可;调用 bar.bar_chart_race(df) 函数即可生成数据的条形动态竞赛图。
条形动态竞赛图保存为视频或GIF图形
要把该动态图形保存为视频或GIF图形格式,便于发布,这就要用到 FFmpeg.exe工具和ImageMagick工具包。使用FFmpeg可以保存为多种视频格式,如mp4、m4v、mov等;保存为GIF动画图形格式,可参阅 如何使用该工具包把动态图形保存为GIF或视频 一文,可了解更多的信息和具体的编程方法。这里仅演示如何使用把动态图形保存为视频的例子,代码如下:
bcr.bar_chart_race(df, 'barvideo_1.mp4', figsize=(5, 3))
上述语句保存的视频如下,该视频保存在代码文件所在的目录下。
也可以把生成的动画图形保存为 HTML 网页格式,这种格式是一个非常长的HTML格式的字符串,代码如下:
html = bcr.bar_chart_race(df)
html.data # 是一个非常长的HTML格式的字符串
指定 bar_chart_race 创建条形动态竞赛图的参数
在 (03)和(04) 部分的基础上,使用 bar_chart_race 函数可以指定参数,制作出个性化的动画图形,以下分别介绍相关参数,并给出动态竞赛图的演示。
- 设置条形动画图的方向,参数 orientation,默认为横向显示
bcr.bar_chart_race(df, orientation = 'v',filename='barvideo_ver.mp4') # 保存
# bcr.bar_chart_race(df, orientation = 'v') # 显示
以上语句的输出结果:
video_ver.mp4
- 设置条形动画为升序或降序,参数 sort,默认为降序
bcr.bar_chart_race(df,sort='asc') #显示
bcr.bar_chart_race(df,sort='asc',filename = 'barvideo_asc.mp4') # 保存
- 指定显示条形的数量,参数 n_bars,默认情况下显示所有的条形
bcr.bar_chart_race(df, n_bars=5)
bcr.bar_chart_race(df, n_bars=5)
- 固定条形的显示顺序,参数 fixed_order,默认情况下条形的显示顺序是变化的
# 保存动画图形为视频
bcr.bar_chart_race(df, fixed_order=['Iran', 'USA', 'Italy', 'Spain', 'Belgium'],filename = 'barvideo_fixed.mp4')
#显示动画图形
bcr.bar_chart_race(df, fixed_order=['Iran', 'USA', 'Italy', 'Spain', 'Belgium'])
- 固定数值最大的条形
# 保存图形为视频
bcr.bar_chart_race(df, fixed_max=True,filename = 'barvideo_fixmax.mp4')
# 显示动画图形
bcr.bar_chart_race(df, fixed_max=True)
- 改变动画的平滑度,参数为 steps_per_period,默认情况下,每个单位时间显示10帧。
# 保存动画图形为视频
bcr.bar_chart_race(df, steps_per_period=3,filename ='barvideo_smoothness.mp4')
# 显示动画图形
bcr.bar_chart_race(df, steps_per_period=3)
- 指定每个单位时间的长度,参数为 period_length ,默认值为500毫秒,即半分钟,示例代码如下:
#保存动态图形为视频文件
bcr.bar_chart_race(df, steps_per_period=20, period_length=200,filename = 'barvideo_periodlen.mp4')
#显示
bcr.bar_chart_race(df, steps_per_period=20, period_length=200)
- 指定时间切片,参数为 interpolate_period,默认情况下每个单位时间显示一帧,可以用该参数指定时间切分的值。以下代码中,时间切分值为一天的十分之一,即2小时24分钟
bcr.bar_chart_race(df, interpolate_period=True,filename = 'barvideo_interpolateperiod.mp4')
bcr.bar_chart_race(df, interpolate_period=True)
绘图属性
bar_chart_race() 函数可以设置如下几种绘图属性:
- figsize,设置动态图形的尺寸,因为bar_chart_race工具包内部调用了matplotlib工具包,这一参数实际是设置matplotlib中plot函数的参数,默认值为(6,3.5)
- dpi,指定每平方英寸绘制的点数,默认值为144
- label_bars,是否标识条形的说明文字,默认值为True
- period_label,指定matplotlib文本属性或布尔值的词典
- title,指定图形的标题
示例代码如下:
bcr.bar_chart_race(df, figsize=(5, 3), dpi=100, label_bars=False,
period_label={'x': .99, 'y': .1, 'ha': 'right', 'color': 'red'},
title='COVID-19 Deaths by Country')
- 标识文字的大小,参数为bar_label_size, tick_label_size 和 title_size,示例代码如下:
bcr.bar_chart_race(df, bar_label_size=4, tick_label_size=5,
title='COVID-19 Deaths by Country', title_size='smaller')
- 设置字体属性,参数为 shared_fontdict,示例代码如下:
bcr.bar_chart_race(df, title='COVID-19 Deaths by Country',
shared_fontdict={'family': 'Helvetica', 'weight': 'bold',
'color': 'rebeccapurple'})
- 指定条形属性,参数为bar_kwargs,是一个词典类型,该参数值被传递给 matplotlib 的bar函数。示例代码如下:
bcr.bar_chart_race(df, bar_kwargs={'alpha': .2, 'ec': 'black', 'lw': 3})
设置条形颜色
- dark12 色系
默认状态下,bar_chart_race() 函数使用 dark12 色系的颜色,有十二种颜色;通过设置参数 cmap 的值,可以指定 dark24 色系的颜色。如果 dataframe 中的列超过12列,该函数默认使用 dark24 色系的颜色,示例代码如下:
bcr.bar_chart_race(df, cmap='antique')
- 颜色可重复
bcr.bar_chart_race(df, cmap='accent', n_bars=7)
以上代码中可设置参数 filter_column_colors 的值,表示是否过滤颜色,设置为True表示最大可能的减少重复的颜色。
其他绘图特色
- 用索引值替代日期。dataframe中的索引值不一定是日期或时间,以下示例代码中使用索引值替代日期,
bcr.bar_chart_race(df.reset_index(drop=True), interpolate_period=True,
period_fmt='Index value - {x:.2f}')
- 在图形中添加汇总数值,这里使用了一个自定义函数 summary(),示例代码如下:
def summary(values, ranks):
total_deaths = int(round(values.sum(), -2))
s = f'Total Deaths - {total_deaths:,.0f}'
return {'x': .99, 'y': .05, 's': s, 'ha': 'right', 'size': 8}
bcr.bar_chart_race(df, period_summary_func=summary)
- 添加垂直条形图,以下代码中添加了均值的条形图,
bcr.bar_chart_race(df, perpendicular_bar_func='mean')
- 添加分位数垂直条形图,用自定义函数计算分位数,代码如下:
def func(values, ranks):
return values.quantile(.9)
bcr.bar_chart_race(df, perpendicular_bar_func=func)
注意:由于头条文章插入视频数量不能超过10个,且头条文章内插入的视频必须是720p以上的,代码中生成并保存的视频达不到要求,所以视频文件不能直接插入文章中,具体效果看后续为本文中专门制作的视频。
(本文完)
相关推荐
- # 安装打开 ubuntu-22.04.3-LTS 报错 解决方案
-
#安装打开ubuntu-22.04.3-LTS报错解决方案WslRegisterDistributionfailedwitherror:0x800701bcError:0x80070...
- 利用阿里云镜像在ubuntu上安装Docker
-
简介:...
- 如何将Ubuntu Kylin(优麒麟)19.10系统升级到20.04版本
-
UbuntuKylin系统使用一段时间后,有新的版本发布,如何将现有的UbuntuKylin系统升级到最新版本?可以通过下面的方法进行升级。1.先查看相关的UbuntuKylin系统版本情况。使...
- Ubuntu 16.10内部代号确认为Yakkety Yak
-
在正式宣布Ubuntu16.04LTS(XenialXerus)的当天,Canonical创始人MarkShuttleworth还非常开心的在个人微博上宣布Ubuntu下个版本16.10的内...
- 如何在win11的wsl上装ubuntu(怎么在windows上安装ubuntu)
-
在Windows11的WSL(WindowsSubsystemforLinux)上安装Ubuntu非常简单。以下是详细的步骤:---...
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
-
IT之家2月18日消息,科技媒体pureinfotech昨日(2月17日)发布博文,介绍了3中简便的方法,让你轻松在Windows11系统中,使用WindowsSubs...
- 如何查看Linux的IP地址(如何查看Linux的ip地址)
-
本头条号每天坚持更新原创干货技术文章,欢迎关注本头条号"Linux学习教程",公众号名称“Linux入门学习教程"。...
- 怎么看电脑系统?(怎么看电脑系统配置)
-
要查看电脑的操作系统信息,可以按照以下步骤操作,根据不同的操作系统选择对应的方法:一、Windows系统通过系统属性查看右键点击桌面上的“此电脑”(或“我的电脑”)图标,选择“属性”。在打开的...
- 如何查询 Linux 内核版本?这些命令一定要会!
-
Linux内核是操作系统的核心,负责管理硬件资源、调度进程、处理系统调用等关键任务。不同的内核版本可能支持不同的硬件特性、提供新的功能,或者修复了已知的安全漏洞。以下是查询内核版本的几个常见场景:...
- 深度剖析:Linux下查看系统版本与CPU架构
-
在Linux系统管理、维护以及软件部署的过程中,精准掌握系统版本和CPU架构是极为关键的基础操作。这些信息不仅有助于我们深入了解系统特性、判断软件兼容性,还能为后续的软件安装、性能优化提供重要依据。接...
- 504 错误代码解析与应对策略(504错误咋解决)
-
在互联网的使用过程中,用户偶尔会遭遇各种错误提示,其中504错误代码是较为常见的一种。504错误并非意味着网站被屏蔽,它实际上是指服务器在规定时间内未能从上游服务器获取响应,专业术语称为“Ga...
- 猎聘APP和官网崩了?回应:正对部分职位整改,临时域名可登录
-
10月12日,有网友反映猎聘网无法打开,猎聘APP无法登录。截至10月14日,仍有网友不断向猎聘官方微博下反映该情况,而猎聘官方微博未发布相关情况说明,只是在微博内对反映该情况的用户进行回复,“抱歉,...
- 域名解析的原理是什么?域名解析的流程是怎样的?
-
域名解析是网站正常运行的关键因素,因此网站管理者了解域名解析的原理和流程对于做好域名管理、解决常见解析问题,保障网站的正常运转十分必要。那么域名解析的原理是什么?域名解析的流程是怎样的?接下来,中科三...
- Linux无法解析域名的解决办法(linux 不能解析域名)
-
如果由于误操作,删除了系统原有的dhcp相关设置就无法正常解析域名。 此时,需要手动修改配置文件: /etc/resolv.conf 将域名解析服务器手动添加到配置文件中 该文件是DNS域名解...
- 域名劫持是什么?(域名劫持是什么)
-
域名劫持是互联网攻击的一种方式,通过攻击域名解析服务器(DNS),或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的地址从而实现用户无法访问目标网站的目的。说的直白些,域名劫持,就是把互...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- # 安装打开 ubuntu-22.04.3-LTS 报错 解决方案
- 利用阿里云镜像在ubuntu上安装Docker
- 如何将Ubuntu Kylin(优麒麟)19.10系统升级到20.04版本
- Ubuntu 16.10内部代号确认为Yakkety Yak
- 如何在win11的wsl上装ubuntu(怎么在windows上安装ubuntu)
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- 如何查看Linux的IP地址(如何查看Linux的ip地址)
- 怎么看电脑系统?(怎么看电脑系统配置)
- 如何查询 Linux 内核版本?这些命令一定要会!
- 深度剖析:Linux下查看系统版本与CPU架构
- 标签列表
-
- navicat无法连接mysql服务器 (65)
- 下横线怎么打 (71)
- flash插件怎么安装 (60)
- lol体验服怎么进 (66)
- ae插件怎么安装 (62)
- yum卸载 (75)
- .key文件 (63)
- cad一打开就致命错误是怎么回事 (61)
- rpm文件怎么安装 (66)
- linux取消挂载 (81)
- ie代理配置错误 (61)
- ajax error (67)
- centos7 重启网络 (67)
- centos6下载 (58)
- mysql 外网访问权限 (69)
- centos查看内核版本 (61)
- ps错误16 (66)
- nodejs读取json文件 (64)
- centos7 1810 (59)
- 加载com加载项时运行错误 (67)
- php打乱数组顺序 (68)
- cad安装失败怎么解决 (58)
- 因文件头错误而不能打开怎么解决 (68)
- js判断字符串为空 (62)
- centos查看端口 (64)