用Python仅仅5行代码实现火爆全网漂亮的动态条形图及参数详解

文章目录

  • 内容介绍
  • 操作使用
  • 参数详解及示例

内容介绍

直接先上一个作品知乎破万播放的动态条形图

近20年岛国的那些老师们的作品动态统计图
用Python仅仅5行代码实现火爆全网漂亮的动态条形图及参数详解_第1张图片

说起动态图表,最火的莫过于动态条形图了。

在B站上搜索「动态条形图」这个关键词,可以看到很多与动态条形图相关的视频。
用Python仅仅5行代码实现火爆全网漂亮的动态条形图及参数详解_第2张图片

目前网上实现动态条形图现成的工具也很多。其他的操作起来比较麻烦。但是作为一名Pythoner,当然是想要研究一下如何用Python来实现。发现到了一个库「Bar Chart Race」,堪称Python界最强的动态可视化包。可做视频、可做图表。

GitHub地址:https://github.com/dexplo/bar_chart_race
文档地址:https://www.dexplo.org/bar_chart_race/

操作使用

直接安装

pip install bar_chart_race 
import bar_chart_race as bcr
 
# 如果出现SSL错误,则全局取消证书验证
# import ssl
# ssl._create_default_https_context = ssl._create_unverified_context
 
# 获取数据
# 示例里的数据直接使用作者提供的,在data文件夹下的covid19_tutorial.csv文件(GitHub上有)。
df = bcr.load_dataset('covid19_tutorial')
df

用Python仅仅5行代码实现火爆全网漂亮的动态条形图及参数详解_第3张图片

# 生成GIF图像
bcr.bar_chart_race(df, 'covid19_horiz.gif')

参数详解及示例

动态条形图变动态柱状图

# orientation='v',生成柱状图
bcr.bar_chart_race(df, 'covid19_horiz.gif', orientation='v')


排序方式,默认为降序(desc)

# 设置排序方式,asc-升序
bcr.bar_chart_race(df, 'covid19_horiz.gif', sort='asc')


条目数限制,此处设置为最多出现6条

# 设置最多能显示的条目数,6条
bcr.bar_chart_race(df, 'covid19_horiz.gif', n_bars=6)


设置固定类目

# 选取如下5个国家的数据
bcr.bar_chart_race(df, 'covid19_horiz.gif', fixed_order=['Iran', 'USA', 'Italy', 'Spain', 'Belgium'])


固定数值轴,使其不发生动态变化

# 设置数值的最大值,固定数值轴
bcr.bar_chart_race(df, 'covid19_horiz.gif', fixed_max=True)

图像帧数,默认10帧,此处设置为3帧

# 图像帧数。数值越小,越不流畅。越大,越流畅。
bcr.bar_chart_race(df, 'covid19_horiz.gif', steps_per_period=3)![请添加图片描述](https://img-blog.csdnimg.cn/8a4de073cbef4e309b5a415b7853c6fd.gif)

设置帧率,单位时间默认为500ms

# 设置20帧的总时间,此处为200ms
bcr.bar_chart_race(df, 'covid19_horiz.gif', steps_per_period=20, period_length=200)


设置每帧增加的标签时间,默认为False

# 输出MP4
bcr.bar_chart_race(df, 'covid19_horiz.mp4', interpolate_period=True)

用Python仅仅5行代码实现火爆全网漂亮的动态条形图及参数详解_第4张图片
绘图属性设置

# 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')


配置标签文字大小

# 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')

全局文字属性

# shared_fontdict-全局字体属性
bcr.bar_chart_race(df, 'covid19_horiz.gif', title='COVID-19 Deaths by Country',
                                 shared_fontdict={
     'family': 'Helvetica', 'weight': 'bold',
                                                              'color': 'rebeccapurple'})
 


条形图属性,可以设置透明度,边框等

# bar_kwargs-条形图属性
bcr.bar_chart_race(df, 'covid19_horiz.gif', bar_kwargs={
     'alpha': .2, 'ec': 'black', 'lw': 3})
 

设置日期标签的时间格式

# 设置日期格式,默认为'%Y-%m-%d'
bcr.bar_chart_race(df, 'covid19_horiz.gif', period_fmt='%b %-d, %Y')


更改日期标签为数值

# 设置日期标签为数值
bcr.bar_chart_race(df.reset_index(drop=True), 'covid19_horiz.gif', interpolate_period=True, 
                                 period_fmt='Index value - {x:.2f}')
 


添加动态文本,此处为数值总数统计

# 设置文本位置、数值、大小、颜色等
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)
 


添加垂直条,可选类型有平均值、分位数等

# 设置垂直条数值,分位数
def func(values, ranks):
    return values.quantile(.9)
# 添加垂直条
bcr.bar_chart_race(df, 'covid19_horiz.gif', perpendicular_bar_func=func)
 


设置柱状图颜色,默认为dark24

# 设置柱状图颜色
bcr.bar_chart_race(df, 'covid19_horiz.gif', cmap='accent')


柱状图颜色不重复,上面这个图是有重复颜色的

# 去除重复颜色
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

你可能感兴趣的:(Python,数据可视化,python,动态条形图,图表制作)