python - 只需1行命令即可绘制条形动态竞赛图
qiyuwang 2024-10-10 11:29 11 浏览 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以上的,代码中生成并保存的视频达不到要求,所以视频文件不能直接插入文章中,具体效果看后续为本文中专门制作的视频。
(本文完)
相关推荐
- 在Word中分栏设置页码一页两个页码的技巧!
-
施老师:在正常情况下,Word文档中一页只会出现一个页码。但在某种情况下,比如说:用了分栏后,我们希望一页中出现两个页码,那应该如何实现呢?今天,就由宁双学好网施老师来为大家讲一下,利用域来实现一页两...
- 如何在关键时刻向上自荐(如何在关键时刻做出正确选择)
-
抓住机会,挺身而出有种时刻叫“关键时刻”,关键时刻,作为一个认为自己有能力的、训练有素的人,应该考虑挺身而出,甚至应该不考虑就挺身而出。...
- WPS Word:跨页的文档表格,快速调整为一页。#Excel
-
如何快速将跨页的文档表格调整为一页?需要根据两种情况分别处理。如果表格所有行的行高相同,调整为一页的方法有两种。第一种方法是将光标移动到表格内,然后将鼠标移动到表格右下角的方框处,按住鼠标左键向上拖动...
- word文档插入下一页分节符(word下一页分页符)
-
在word文档中,对文档页面进行分页是特别常见的操作,其中的下一页分节符也是用得比较多的,但是一些人不太清楚在哪里设置,也不知道它具体能实现的功能是什么。接下来看看如何在word文档中插入下一页分节符...
- word文档如何设置某一页纸张的方向
-
word文档页面方向有横向和纵向,纵向是默认的纸张方向,有时我们需要将页面设置为横向,或只设置其中某一页方向,应该怎么操作呢?一起来看看下面的详细介绍第一步:...
- word怎么单独设置一页为横向(word2019怎样设置单独一页为横向)
-
word里面其中一页可以改为横向的吗?经过实际操作发现是完全可以的。...
- Word如何设置分栏,如何一页内容同时显示一栏和两栏
-
我们使用Word文档,有时需要用到两栏的排版,甚至一页内容同时包含一栏和两栏的排版,这种格式怎么设置呢?具体步骤如下:首先是两栏排版的设置,直接点击Word文件上方工具栏【布局】,选择【分栏】下面的【...
- Word怎么分页?这三个方法可以帮到你
-
我们不仅可以利用Word编辑文档,还可以编辑文集呢。但是有时候会出现两个部分的文章长短不一,我们需要对文档进行分页处理。这样可以方便我们对文档进行其他操作。那么Word怎么分页呢?大家可以采用下面这...
- Word内容稍超一页,如何优化至单页打印?
-
如何将两页纸的内容,缩到一页打印呢?有时候一页纸多一点内容,我们完全可以缩一下,放到一页来打印。...
- [word] word 表格如何跨行显示表头、标题
-
word表格如何跨行显示表头、标题在Word中的表格如果过长的话,会跨行显示在另一页,如果想要在其它页面上也显示表头,更直观的查看数据。难道要一个个复制表头吗?当然不是,教你简单的方法操作设置Wo...
- Word表格跨页如何续上表?(word如何让表格跨页不断掉)
-
长文档的表格跨页时,你会发现页末空白太多了,这时要怎么调整?选中整张表格,右击【表格属性】,点击【行】选项,之后勾选【允许跨页断行】,点击确定即可解决空白问题。...
- Word怎么连续自动生成页码,操作步骤来了!
-
Word怎么连续自动生成页码,操作步骤来了!...
- word文档怎么把两页合并成一页内容?教你4种方法
-
word怎么把两页合并成一页?word怎么把两页合并成一页?用四种方法演示一下。·方法一:把这一个文档合并成一页,按ctrl加a全选文档,然后右键点击段落,弹出的界面行距改成固定值,磅值可以改小一点,...
- 如何将Word中的一页的纸张方向设置为横向?这里提供详细步骤
-
默认情况下,MicrosoftWord将页面定向为纵向视图。虽然这在大多数情况下都很好,但你可能拥有在横向视图中看起来更好的页面或页面组。以下是实现这一目标的两种方法。无论使用哪种方法,请注意,如果...
- Word横竖混排你会玩吗?(word横排竖排混合)
-
我们在用Word排版的时候,一般都是竖版格式,但偶尔会需要到一些特殊的版式要求,比如文档中插入的一个表格,横向的内容比较多,这时就需要用到横版,否则表格显示不全。这种横竖版混排的要求,在Word20...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 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)