
作者:小伍哥
来源:AI入门学习
上次出了一个在网站「Flourish」画动态条形图的文章【动态条形图视频教程】,需要登录网址很多人可能觉得不方便,现在有大佬出了个python包,只需几行代码就能搞定动态条形图,非常强大,给大家分享下。
一、前期准备工作
1、官方参考文档
GitHub :https://github.com/dexplo/bar_chart_race
说明文档:https://www.dexplo.org/bar_chart_race/
2、软件安装(该安装方法只能安装0.1版本)
pip install bar_chart_race conda install -c conda-forge bar_chart_race
0.2版本需要到github安装
压缩包解压到软件安装目录的/site-packages目录下,利用命令行安装即可
3、安装ffmpeg、ImageMagick
ffmpeg包:不然无法输出 mp4/m4v/mov/等格式的视频,该包比较复杂,需要配置变量环境,具体操作可以看看这个博客:
https://baijiahao.baidu.com/s?id=1660327134602942057&wfr=spider&for=pc
ImageMagick包:如果你要创建GIF,需要安装这个包ImageMagick,安装方法与上述类似。
二、官方数据画图
上述准备都做好了,那就可以开始画图了,利用官方提供的数据,直接加载就可以,我的数据下载没成功,所以自己上传数据绘图,等下回讲怎么自己上传数据。
#加载包 import bar_chart_race as bcr #下载数据 df = bcr.load_dataset('covid19_tutorial') #生成GIF图像 bcr.bar_chart_race(df, 'covid19_horiz.gif') #生成MP4 bcr.bar_chart_race(df, 'covid19_horiz.MP4')
生成的GIF
生成的MP4
三、自己的数据画图
如果是自己的数据,要进行一定的处理,达到画图格式,不然会报错。
#读取数据 df = pd.read_csv('data.csv') #格式处理,需要把日期date转换成索引,不能作为单独一列 df = df.set_index(keys='date') 作者也提供了两个处理数据的函数 bcr.prepare_wide_data bcr.prepare_long_data
原始数据
处理后数据(date转换成了索引)
四、图形美化
作者还提供了很多参数,对图形进行调整和美化,输出的图形更漂亮
1、横转纵 Vertical bars
#orientation='v',.gif变成MP4即可输出视频 bcr.bar_chart_race(df, 'covid19_horiz.gif', orientation='v')
2、升序排序
# 排序方式,sort='asc'-升序 bcr.bar_chart_race(df, 'covid19_horiz.gif', sort='asc')
3、类目数限制,此处设置为最多出现6条
# 设置最多能显示的条目数 n_bars=6 bcr.bar_chart_race(df, 'covid19_horiz.gif', n_bars=6)
4、设置展示类目
# 选取如下5个国家的数据 fixed_order bcr.bar_chart_race(df, 'covid19_horiz.gif', fixed_order=['Iran', 'USA', 'Italy', 'Spain', 'Belgium'])
5、固定坐标轴
#设置数值的最大值,固定数值轴fixed_max bcr.bar_chart_race(df, 'covid19_horiz.gif', fixed_max=True)
6、改变图像帧数
#图像帧数,数值越小,越不流畅。越大,越流畅。默认为10比较流畅,改为3就有些卡顿了 bcr.bar_chart_race(df, 'covid19_horiz.gif', steps_per_period=3)
7、设置帧率,默认为500ms
# 设置20帧的总时间,此处为200ms bcr.bar_chart_race(df, 'covid19_horiz.gif', steps_per_period=20, period_length=200)
8、设置每帧增加的标签时间,默认为False
# 输出gif bcr.bar_chart_race(df, 'covid19_horiz.gif', interpolate_period=True)
9、绘图属性设置
# figsize-设置画布大小,默认(6, 3.5) # dpi-图像分辨率,默认144 # label_bars-显示柱状图的数值信息,默认为True # period_label-显示时间标签信息,默认为True # title-图表标题 bcr.bar_chart_race(df, 'covid19_horiz.gif', figsize=(5, 3), dpi=100, label_bars=False, period_label={'x': .99, 'y': .1, 'ha': 'right', 'color': 'red'}, title='COVID-19 Deaths by Country')
10、配置标签文字大小
# bar_label_size-柱状图标签文字大小 # tick_label_size-坐标轴标签文字大小 # title_size-标题标签文字大小 bcr.bar_chart_race(df, 'covid19_horiz.gif', bar_label_size=4, tick_label_size=5, title='COVID-19 Deaths by Country', title_size='smaller')
11、全局字体属性设置
# shared_fontdict-全局字体属性 bcr.bar_chart_race(df, 'covid19_horiz.gif', title='COVID-19 Deaths by Country', shared_fontdict={'family': 'Helvetica', 'weight': 'bold', 'color': 'rebeccapurple'})
12、透明度,边框等设置
# bar_kwargs-条形图属性设置参数 bcr.bar_chart_race(df, 'covid19_horiz.gif', bar_kwargs={'alpha': .2, 'ec': 'black', 'lw': 3})
13、日期格式设置
# 设置日期格式,默认为'%Y-%m-%d' bcr.bar_chart_race(df, 'covid19_horiz.gif', period_fmt='%b %-d, %Y')
14、改日期标签为数值格式
# 设置日期标签为数值 bcr.bar_chart_race(df.reset_index(drop=True), 'covid19_horiz.gif', interpolate_period=True, period_fmt='Index value - {x:.2f}')
15、添加汇总统计
#设置文本位置、数值、大小、颜色等 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, 'covid19_horiz.gif', period_summary_func=summary
16、添加垂直条参考线(平均值、分位数等)
# 设置垂直条数值,分位数 def func(values, ranks): return values.quantile(.9) # 添加垂直条 bcr.bar_chart_race(df, 'covid19_horiz.gif', perpendicular_bar_func=func)
17、设置柱状图颜色
'dark12' is the default colormap. If there are more than 10 columns, then the default colormap will be 'dark24'
# 设置柱状图颜色 bcr.bar_chart_race(df, 'covid19_horiz.gif', cmap='accent')
18、颜色不重复
#filter_column_colors保证颜色不重复 bcr.bar_chart_race(df, 'covid19_horiz.gif', cmap='accent', filter_column_colors=True)
19、中文支持配置
中文配置只需在第三方库的_make_chart.py文件中,加入如下三行代码。
#中文显示 plt.rcParams['font.sans-serif'] = ['SimHei'] #Windows plt.rcParams['font.sans-serif'] = ['Hiragino Sans GB'] #Mac plt.rcParams['axes.unicode_minus'] = False
20、自定义颜色
此外通过在「_colormaps.py」文件中添加颜色信息,经cmap引用,即可自定义配置颜色。
colormaps = { "new_colors": [ '#ff812c', '#ff5a5a', '#00c5d2', '#a64dff', '#4e70f0', '#f95dba', '#ffce2b']}
——热门课程推荐:
想从事业务型数据分析师,您可以点击>>>“数据分析师”了解课程详情;
想从事大数据分析师,您可以点击>>>“大数据就业”了解课程详情;
想成为人工智能工程师,您可以点击>>>“人工智能就业”了解课程详情;
想了解Python数据分析,您可以点击>>>“Python数据分析师”了解课程详情;
想咨询互联网运营,你可以点击>>>“互联网运营就业班”了解课程详情;
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
Excel 导入数据含缺失值?详解 dropna 函数的功能与实战应用 在用 Python(如 pandas 库)处理 Excel 数据时,“缺失值” 是高频 ...
2025-09-16深入解析卡方检验与 t 检验:差异、适用场景与实践应用 在数据分析与统计学领域,假设检验是验证研究假设、判断数据差异是否 “ ...
2025-09-16CDA 数据分析师:掌控表格结构数据全功能周期的专业操盘手 表格结构数据(以 “行 - 列” 存储的结构化数据,如 Excel 表、数据 ...
2025-09-16MySQL 执行计划中 rows 数量的准确性解析:原理、影响因素与优化 在 MySQL SQL 调优中,EXPLAIN执行计划是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 对象的 text 与 content:区别、场景与实践指南 在 Python 进行 HTTP 网络请求开发时(如使用requests ...
2025-09-15CDA 数据分析师:激活表格结构数据价值的核心操盘手 表格结构数据(如 Excel 表格、数据库表)是企业最基础、最核心的数据形态 ...
2025-09-15Python HTTP 请求工具对比:urllib.request 与 requests 的核心差异与选择指南 在 Python 处理 HTTP 请求(如接口调用、数据爬取 ...
2025-09-12解决 pd.read_csv 读取长浮点数据的科学计数法问题 为帮助 Python 数据从业者解决pd.read_csv读取长浮点数据时的科学计数法问题 ...
2025-09-12CDA 数据分析师:业务数据分析步骤的落地者与价值优化者 业务数据分析是企业解决日常运营问题、提升执行效率的核心手段,其价值 ...
2025-09-12用 SQL 验证业务逻辑:从规则拆解到数据把关的实战指南 在业务系统落地过程中,“业务逻辑” 是连接 “需求设计” 与 “用户体验 ...
2025-09-11塔吉特百货孕妇营销案例:数据驱动下的精准零售革命与启示 在零售行业 “流量红利见顶” 的当下,精准营销成为企业突围的核心方 ...
2025-09-11CDA 数据分析师与战略 / 业务数据分析:概念辨析与协同价值 在数据驱动决策的体系中,“战略数据分析”“业务数据分析” 是企业 ...
2025-09-11Excel 数据聚类分析:从操作实践到业务价值挖掘 在数据分析场景中,聚类分析作为 “无监督分组” 的核心工具,能从杂乱数据中挖 ...
2025-09-10统计模型的核心目的:从数据解读到决策支撑的价值导向 统计模型作为数据分析的核心工具,并非简单的 “公式堆砌”,而是围绕特定 ...
2025-09-10CDA 数据分析师:商业数据分析实践的落地者与价值创造者 商业数据分析的价值,最终要在 “实践” 中体现 —— 脱离业务场景的分 ...
2025-09-10机器学习解决实际问题的核心关键:从业务到落地的全流程解析 在人工智能技术落地的浪潮中,机器学习作为核心工具,已广泛应用于 ...
2025-09-09SPSS 编码状态区域中 Unicode 的功能与价值解析 在 SPSS(Statistical Product and Service Solutions,统计产品与服务解决方案 ...
2025-09-09CDA 数据分析师:驾驭商业数据分析流程的核心力量 在商业决策从 “经验驱动” 向 “数据驱动” 转型的过程中,商业数据分析总体 ...
2025-09-09R 语言:数据科学与科研领域的核心工具及优势解析 一、引言 在数据驱动决策的时代,无论是科研人员验证实验假设(如前文中的 T ...
2025-09-08T 检验在假设检验中的应用与实践 一、引言 在科研数据分析、医学实验验证、经济指标对比等领域,常常需要判断 “样本间的差异是 ...
2025-09-08