刷爆全网的动态条形图,原来 5 行 Python 代码就能实现!
作者 | 小F
来源 | 法纳斯特(ID:walker398)
头图 | CSDN 下载自视觉中国
说起动态图表,最火的莫过于动态条形图了。
在B站上搜索「数据可视化」这个关键词,可以看到很多与动态条形图相关的视频。
好多视频都达到了上百万的播放量,属实厉害。
目前网上实现动态条形图现成的工具也很多。
比如数可视的「花火hanabi」,嫡数的「镝数图表」,以及国外网站「Flourish」。
但是作为一名 Pythoner,当然是想要研究一下如何用Python来实现。
之前也看过大佬们通过 Matplotlib、Plotly、Pyecharts 实现类似的功能,就是代码量有点多,看的脑瓜疼。
所以小F最近发现到了一个库「Bar Chart Race」,堪称Python界最强的动态可视化包。
GitHub地址:
https://github.com/dexplo/bar_chart_race
文档地址:
https://www.dexplo.org/bar_chart_race/
目前主要有0.1和0.2两个版本,0.2版本添加动态曲线图以及Plotly实现的动态条形图。
库是挺好的,就是在安装上有点问题。
在PyCharm的Project Interpreter上只能安装到0.1版本,功能不太全。
通过pip install bar_chart_race也只能到0.1版本。
最后小F选择将项目从GitHub上下载下来,再进行安装。
下载压缩包,将解压后的文件夹放置在项目的venv/lib/python3.7/site-packages目录下。
在虚拟环境下打开文件夹,命令行运行如下命令完成安装。
cd 你的项目地址/venv/lib/python3.7/site-packages/bar_chart_race-master
python setup.py install# 提示成功安装
# Finished processing dependencies for bar-chart-race==0.2.0
好了,安装成功后就可以引入这个第三方库。
import bar_chart_race as bcr# 如果出现SSL错误,则全局取消证书验证
# import ssl
# ssl._create_default_https_context = ssl._create_unverified_context# 获取数据
df = bcr.load_dataset('covid19_tutorial')
# print(df)# 生成GIF图像
bcr.bar_chart_race(df, 'covid19_horiz.gif')
生成了一个GIF图,具体如下。
3行代码Python代码就实现了,对大佬封装好的库表示膜拜~
这里因为作者封装好了数据处理模块,只需要3行代码即可。
对于我们而言,是需要加载自己的数据,自己进行处理,所以多了那么2行。
示例里的数据直接使用作者提供的,在data文件夹下的covid19_tutorial.csv文件(GitHub上有)。
经过其封装好的数据处理函数,得到最终的数据。
另外作者还提供了很多配置参数,供大家选择。
1、动态条形图变动态柱状图
# orientation='v',生成柱状图
bcr.bar_chart_race(df, 'covid19_horiz.gif', orientation='v')
2、排序方式,默认为降序(desc)
# 设置排序方式,asc-升序
bcr.bar_chart_race(df, 'covid19_horiz.gif', sort='asc')
3、条目数限制,此处设置为最多出现6条
# 设置最多能显示的条目数,6条
bcr.bar_chart_race(df, 'covid19_horiz.gif', n_bars=6)
4、设置固定类目
# 选取如下5个国家的数据
bcr.bar_chart_race(df, 'covid19_horiz.gif', fixed_order=['Iran', 'USA', 'Italy', 'Spain', 'Belgium'])
5、固定数值轴,使其不发生动态变化
# 设置数值的最大值,固定数值轴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
# 输出MP4
bcr.bar_chart_race(df, 'covid19_horiz.mp4', 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.gipurple'})
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}')
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、设置柱状图颜色,默认为dark24
# 设置柱状图颜色
bcr.bar_chart_race(df, 'covid19_horiz.gif', cmap='accent')
18、柱状图颜色不重复,上面这个图是有重复颜色的
# 去除重复颜色
bcr.bar_chart_race(df, 'covid19_horiz.gif', cmap='accent', filter_column_colors=True)
这里有一些要注意的地方,比如中文配置,以及自定义颜色配置。
中文配置只需在第三方库的「_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
现在在图表中加入中文,来看看结果。
import bar_chart_race as bcr
import pandas as pd# 读取数据
df = pd.read_csv('yuhuanshui.csv', encoding='utf-8', header=0, names=['name', 'number', 'day'])
# 处理数据
df_result = pd.pivot_table(df, values='number', index=['day'], columns=['name'], fill_value=0)
# print(df_result)# 生成图像
bcr.bar_chart_race(df_result, 'heat.gif', title='我是余欢水演职人员热度排行')
使用电视剧余欢水人物的「百度指数」数据。
文件具体内容如下。
经过数据透视表处理后,得到与该库格式相同的数据。
想用自己的数据来做动态条形图,5行代码即可搞定。
此外通过在「_colormaps.py」文件中添加颜色信息,经cmap引用,即可自定义配置颜色。
colormaps =
{"new_colors": ['#ff812c','#ff5a5a','#00c5d2','#a64dff','#4e70f0','#f95dba','#ffce2b']
}
使用一波,看会不会变得好看一些。
# 使用自定义的颜色列表
bcr.bar_chart_race(df_result, 'heat.gif', title='我是余欢水演职人员热度排行', cmap='new_colors')
果然,看起来还不错~
还有一些细节上的参数,大家可通过查看库的源码,来了解一二。
更多精彩推荐
☞软件开发行业,年轻与大龄程序员的生存现状究竟如何?
☞当代程序员学生有多能拼?请看表演!| 每日趣闻
☞被判赔联想525万,常程方回应:提起诉讼;百度自动驾驶出租车在京全面开放;VS Code 1.50版发布|极客头条
☞采摘工人月薪十万却无人应聘,英澳农场求助 AI
☞放弃 Windows 后 ,开源操作系统能成为主流桌面系统吗?
☞错过了秋天的第一杯奶茶,不要错过秋天第一场黑客松
点分享点点赞点在看
刷爆全网的动态条形图,原来 5 行 Python 代码就能实现!相关推荐
- 【Python基础】刷爆网络的动态条形图,3行Python代码就能搞定
上次出了一个在网站「Flourish」画动态条形图的文章[动态条形图视频教程],需要登录网址很多人可能觉得不方便,现在有大佬出了个Python包,只需几行代码就能搞定动态条形图,非常强大,给大家分享下 ...
- 刷爆网络的动态条形图,3行Python代码就能搞定
作者:小伍哥 来源:AI入门学习 上次出了一个在网站「Flourish」画动态条形图的文章[动态条形图视频教程],需要登录网址很多人可能觉得不方便,现在有大佬出了个Python包,只需几行代码就能搞定 ...
- 5行Python代码实现刷爆全网的动态条形图!
作者 | 小F 来源 | 法纳斯特(ID:walker398) 头图 | CSDN 下载自视觉中国 说起动态图表,最火的莫过于动态条形图了. 在B站上搜索「数据可视化」这个关键词,可以看到很多与动态 ...
- 刷爆全网的动态条形图,原来5行Python代码就能实现!
击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 千载琵琶作胡语,分明怨恨曲中论. 说 ...
- python加油视频_python分析6625条视频,揭秘“打工人”凭啥刷爆全网!
原标题:python分析6625条视频,揭秘"打工人"凭啥刷爆全网! CDA数据分析师 出品 作者:Mika 数据:真达 后期:Mika [导读] Show me data,用数据 ...
- python有什么用途视频_Python分析6625条视频,告诉你“打工人”凭什么能刷爆全网...
原标题:Python分析6625条视频,告诉你"打工人"凭什么能刷爆全网 CDA数据分析师 出品 作者:Mika 数据:真达 后期:Mika [导读] 今天教大家用Python分析 ...
- 爆肝200天!18岁上海高中生自制机器人,250行Python代码「注入灵魂」
新智元报道 来源:bilibili 编辑:yaxin [导读]十八岁的你在做什么?凌十七,18岁,耗时200天,用树莓派DIY机器人.这位B站up主爆火出圈,纯手工自制塑料外壳,焊接钢架,25 ...
- 王者荣耀——bat批处理文件,自动刷金币版(脱胎于30行Python代码刷金币版),Windows双击即可运行!
参考<30行Python代码刷王者荣耀金币>:https://segmentfault.com/a/1190000012520431 1.源代码 以下是源代码部分,全部复制到文本文档, 用 ...
- 用11行Python代码,实现动态二维码制作
用11行Python代码,实现动态二维码制作 效果展示 Python实现 素材 其他工具 效果展示 Python实现 要预装myqr模块才行. windows键+R 打开cmd,输入pip insta ...
最新文章
- 在IIS上部署基于django WEB框架的python网站应用
- 2018 中国准独角兽 TOP 50 夏榜发布!146 家投资机构、227 家企业参与
- 窗口分析函数_7_生成指定的分组序号
- 会议更流畅,表情更生动!视频生成编码 VS 国际最新 VVC 标准
- java math.cos_Java Math类静态double cos(double d)示例
- python︱写markdown一样写网页,代码快速生成web工具:streamlit lay-out布局(四)
- 笔记:Hadoop权威指南 第9章 构建Hadoop集群
- 如何利用极域电子教室软件漏洞干翻所有机房
- 产品综合评价模型——基于商品评论建立的产品综合评价模型(2)
- 无法定位程序输入点dxgiget_无法定位程序输入点于动态链接库dxgi.dll上怎么解决?-51dll帮助...
- MATLAB中Spline插值使用记录
- 淘宝订单自动确认收货的N种实现,秒杀面试官
- 令人敬畏的泰格伍兹 万维钢_使用SwiftUI创建令人敬畏的加载状态
- Java期末考试试题及参考答案(01)
- oracle tns远程投毒,Oracle TNS Listener Remote Poisoning 测试
- 使用Grid++report开发报表功能
- 思科防火墙NAT——实验
- 如何比较好的规避拼多多纠纷退款的技巧?天创速盈来说
- ChatGPT会取代互联网程序员吗?
- cb32a_c++_STL_算法_查找算法_(5)adjacent_find
热门文章
- 高校招聘!事业编制,年薪高达150万,提供安家费及购房补贴,硕士研究生及以上学历...
- 比尔·盖茨官宣离婚!除了孩子和基金会,一切都是浮云
- 【最强ResNet改进系列】IResNet:涨点不涨计算量,可训练网络超过3000层!
- AI顶会组团“改版”:NeurIPS 2020宣布deadline延期三周
- linux项目课程设计,LINUX课程设计项目需求解析.doc
- 浅谈RPA 在银行领域的十个场景应用
- 某微信公众号2019 SAP模块精华帖汇总
- SAP SD销售业务中客户投诉退货的处理方案
- SAP QM 主检验特性主数据关键字段解释
- 2010年—2018年中国电商成交额排名