5行Python代码就能实现刷爆全网的动态条形图!
说起动态图表,最火的莫过于动态条形图了。
在B站上搜索「数据可视化」这个关键词,可以看到很多与动态条形图相关的视频。
好多视频都达到了上百万的播放量,属实厉害。
目前网上实现动态条形图现成的工具也很多。
比如数可视的「花火hanabi」,嫡数的「镝数图表」,以及国外网站「Flourish」。
但是作为一名Pythoner,当然是想要研究一下如何用Python来实现。
之前也看过大佬们通过Matplotlib、Plotly、Pyecharts实现类似的功能,就是代码量有点多,看的脑瓜疼。
所以最近发现到了一个库「Bar Chart Race」,堪称Python界最强的动态可视化包。
GitHub地址:
文档地址:
目前主要有0.1和0.2两个版本,0.2版本添加动态曲线图以及Plotly实现的动态条形图。
库是挺好的,就是在安装上有点问题。
在PyCharm的Project Interpreter上只能安装到0.1版本,功能不太全。
通过pip install bar_chart_race也只能到0.1版本。
最后选择将项目从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上有)。
经过其封装好的数据处理函数,得到最终的数据。
另外作者还提供了很多配置参数,供大家选择。
01 动态条形图变动态柱状图
# orientation='v',生成柱状图
bcr.bar_chart_race(df, 'covid19_horiz.gif', orientation='v')
复制代码
02 排序方式,默认为降序(desc)
# 设置排序方式,asc-升序
bcr.bar_chart_race(df, 'covid19_horiz.gif', sort='asc')
复制代码
03 条目数限制,此处设置为最多出现6条
# 设置最多能显示的条目数,6条
bcr.bar_chart_race(df, 'covid19_horiz.gif', n_bars=6)
复制代码
04 设置固定类目
# 选取如下5个国家的数据
bcr.bar_chart_race(df, 'covid19_horiz.gif', fixed_order=['Iran', 'USA', 'Italy', 'Spain', 'Belgium'])
复制代码
05 固定数值轴,使其不发生动态变化
# 设置数值的最大值,固定数值轴
bcr.bar_chart_race(df, 'covid19_horiz.gif', fixed_max=True)
复制代码
06 图像帧数,默认10帧,此处设置为3帧,可以发现图像明显变得有些卡顿
# 图像帧数。数值越小,越不流畅。越大,越流畅。
bcr.bar_chart_race(df, 'covid19_horiz.gif', steps_per_period=3)
复制代码
07 设置帧率,单位时间默认为500ms
# 设置20帧的总时间,此处为200ms
bcr.bar_chart_race(df, 'covid19_horiz.gif', steps_per_period=20, period_length=200)
复制代码
08 设置每帧增加的标签时间,默认为False
# 输出MP4
bcr.bar_chart_race(df, 'covid19_horiz.mp4', interpolate_period=True)
复制代码
09 绘图属性设置
# 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 设置柱状图颜色,默认为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')
复制代码
果然,看起来还不错~
还有一些细节上的参数,大家可通过查看库的源码,来了解一二。
交流基地:630390733
5行Python代码就能实现刷爆全网的动态条形图!的更多相关文章
- 一个 11 行 Python 代码实现的神经网络
一个 11 行 Python 代码实现的神经网络 2015/12/02 · 实践项目 · 15 评论· 神经网络 分享到:18 本文由 伯乐在线 - 耶鲁怕冷 翻译,Namco 校稿.未经许可,禁止转 ...
- 200行Python代码实现2048
200行Python代码实现2048 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面 ...
- 40多行python代码开发一个区块链。
40多行python代码开发一个区块链?可信吗?我们将通过Python 2动手开发实现一个迷你区块链来帮你真正理解区块链技术的核心原理.python开发区块链的源代码保存在Github. 尽管有人认为 ...
- 15行python代码,帮你理解令牌桶算法
本文转载自: http://www.tuicool.com/articles/aEBNRnU 在网络中传输数据时,为了防止网络拥塞,需限制流出网络的流量,使流量以比较均匀的速度向外发送,令牌桶算法 ...
- 30行Python代码实现人脸检测
参考OpenCV自带的例子,30行Python代码实现人脸检测,不得不说,Python这个语言的优势太明显了,几乎把所有复杂的细节都屏蔽了,虽然效率较差,不过在调用OpenCV的模块时,因为模块都是C ...
- 21行python代码实现拼写检查器
引入 大家在使用谷歌或者百度搜索时,输入搜索内容时,谷歌总是能提供很好的拼写检查,比方你输入 speling,谷歌会立即返回 spelling. 前几天,看到http://norvig.com/spe ...
- vim中凝视多行python代码
在vim中凝视多行python代码比較麻烦,主要由下面几种方法: (1)将须要凝视的代码以文档字符串的形式呈现 (2)将须要凝视的代码以函数的形式呈现 (3)使用vim自身快捷键 我们主要使用第三种方 ...
- 几行python代码解决相关词联想
日常生活中经常会遇到相关词联想的问题,也就是说输入一个词汇,把相关的词汇查询出来,听起来这个做法也不是太难,但如何去积累那么多的词汇,再用好的算法将相关内容联系起来,本身还是不简单的.笔者认为最简单的 ...
- 10 行 Python 代码实现模糊查询/智能提示
10 行 Python 代码实现模糊查询/智能提示 1.导语: 模糊匹配可以算是现代编辑器(如 Eclipse 等各种 IDE)的一个必备特性了,它所做的就是根据用户输入的部分内容,猜测用户想要的 ...
随机推荐
- Netty源码分析之ByteBuf(二)—内存分配器ByteBufAllocator
Netty中的内存分配是基于ByteBufAllocator这个接口实现的,通过对它的具体实现,可以用来分配我们之前描述过的任意类型的BytebBuf实例:我们先看一下ByteBufAllocator ...
- 浅谈 Tarjan 算法之强连通分量(危
引子 果然老师们都只看标签拉题... 2020.8.19新初二的题集中出现了一道题目(现已除名),叫做Running In The Sky. OJ上叫绮丽的天空 发现需要处理环,然后通过一些神奇的渠道 ...
- Leetcode 双周赛#32 题解
1540 K次操作转变字符串 #计数 题目链接 题意 给定两字符串\(s\)和\(t\),要求你在\(k\)次操作以内将字符串\(s\)转变为\(t\),其中第\(i\)次操作时,可选择如下操作: 选 ...
- Pytest学习(十二)-生成HTML报告插件之pytest-html的使用
环境前提 Python3.6+ 安装插件 pip3 install pytest-html -i http://pypi.douban.com/simple/ --trusted-host pypi. ...
- 【NOIP2017提高A组模拟9.12】Arrays and Palindrome
[NOIP2017提高A组模拟9.12]Arrays and Palindrome[SPJ] 题目 Description Input Output Sample Input 1 6 Sample O ...
- 【Usaco 2009 Gold 】JZOJ2020年9月19日提高B组T2 电视游戏问题
[Usaco 2009 Gold ]JZOJ2020年9月19日提高B组T2 电视游戏问题 题目 Description 农夫约翰的奶牛们游戏成瘾!本来FJ是想要按照陶叫兽的做法拿她们去电击戒瘾的,可 ...
- JZOJ2020年8月7日提高组反思
JZOJ2020年8月7日提高组反思 T1 暴力枚举 枚举起点和\(p\) 然后就 过了?! 根据本人不严谨的推算 时间复杂度\(O(\dfrac{n^7}{4})\) 数据太水就过去了QAQ T2 ...
- 学习PKI技术【理论+实战】
1.预备知识 PKI(Public Key Infrastructure)定义 PKI:利用公钥理论和技术建立的提供网络信息安全服务的基础设施.为用户提供所需的密钥和证书管理,用户可以利用PKI平台提 ...
- scentos7安装redis,以及redis的主从配置
redis的安装 下载redis安装包 wget http://download.redis.io/releases/redis-4.0.6.tar.gz 解压压缩包 tar -zxvf redis- ...
- 第二十七章、containers容器类部件QTabWidget选项窗部件详解
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 容器部件就是可以在部件内放置其他部件的部件,在Qt Designer中可以使用的容器部件有 ...