最简单方法!!用python生成动态条形图

文章目录

  • 最简单方法!!用python生成动态条形图
    • 1. 安装第三方包: bar_chart_race
    • 2. 数据准备
    • 3. 函数讲解
    • 4. 详细举例(复制即可用)
      • 4.1 基本条形图
      • 4.2 柱状图
      • 4.3 排序图
      • 4.4 限制条形图数量
      • 4.5 固定条形的顺序
      • 4.6 固定轴的最大值
      • 4.7 设置帧数
      • 4.8 设置步长与停留时间
      • 4.9 添加插入时间
      • 4.10 设置字体属性
      • 4.11 定制条形属性
      • 4.12 增加文本说明
      • 4.13 增加垂直bar平均值
      • 4.14 自定义垂直bar——最大值
      • 4.15 条形图颜色不重复
    • 5. 遇到的问题
      • 5.1 [报错] `AttributeError: module ‘sip‘ has no attribute ‘setapi‘`
      • 5.2 [报错] `IndexError: list index out of range`
      • 5.3 [报错] `TypeError: bar_chart_race() got an unexpected keyword argument 'figsize'`

最近非常流行动态条形图,在B站等视频网站上,此类视频经常会有上百万的播放量,今天我们通过第三方库:bar_chart_race (0.2 版本)来实现动态条形图的生成;生成的效果如图:
问题:我发现按照目前流行的文章里操作,会有很多的报错,有一些我解决了,有一些我还没有解决,现在把目前的进展记录在这里;数据与程序在这里:点击下载;

1. 安装第三方包: bar_chart_race

首先,我们要明白:只有 0.2版本才支持动态条形图,所以我们必须保证我们安装的第三方库为 0.2版本;
遗憾的是,我们通过pip install bar_chart_race 命令安装的第三方包,版本是0.1,也无法升级;所以,这里我们推荐在github上下载,然后安装;安装步骤如下:

  1. 首先要保证已经安装了github 软件,如果没有,windows 请在这里下载:https://git-scm.com/download/win, 点击自己的版本下载,然后安装;其他系统也是一样滴~~

  2. git安装完毕后,在cmd中切换到想要下载的目录,然后下载:git clone https://github.com/dexplo/bar_chart_race.git
    其中,https://github.com/dexplo/bar_chart_race.git 就是它的git地址;
    我这里下载的目录是:D:\PY_useful\3_python 基础,下载完成后,会生成一个文件夹:bar_chart_race

  3. 在cmd中进入该文件夹,然后运行:python setup.py install,安装完成后,会提示:Finished processing dependencies for bar-chart-race==0.2.0 ,看到这个,就证明我们成功了!

2. 数据准备

数据需要满足以下条件:

  1. 每一行必须是一个单独日期的数据;
  2. 每一列是一个单独的分类;
  3. 索引最好是日期数据(可选项);
  4. 数据必须变化成 pandas.DataFrame 格式;

官网 https://www.dexplo.org/bar_chart_race/, 官网的举例如下:

date Belgium China France Germany Iran Italy Netherlands Spain USA United Kingdom
2020-04-08 2240 3337 10887 2349 3993 17669 2255 14792 14704 7111
2020-04-09 2523 3339 12228 2607 4110 18279 2403 15447 16553 7993
2020-04-10 3019 3340 13215 2767 4232 18849 2520 16081 18595 8974
2020-04-11 3346 3343 13851 2894 4357 19468 2653 16606 20471 9892
2020-04-12 3600 3343 14412 3022 4474 19899 2747 17209 22032 10629

但是,由于官网上的例子都是使用 df = bcr.load_dataset('covid19_tutorial') 加载的,而我们如果不翻墙的话,是无法加载这个数据的,我把供大家练习的数据放在这里:点击下载练习数据;

3. 函数讲解

第三方模块bar_chart_race,只有两个函数来生成我们的动态图,

  1. 动态条形图:bar_chart_race.bar_chart_race();下面详细解释一下这个函数中所有的参数:
  2. 动态线形图:bar_chart_race.line_chart_race();与上面的条形图类似;
import bar_chart_race as bcr
import pandas
df=pd.read_csv('数据.csv',index_col=0)   # 下载数据后,放在.py文件所在文件夹;# 以下有 # 注释的参数,是我实际使用中发现并没有的;可是官网资料上有这些参数,不知道为什么~~
bcr.bar_chart_race(df=df,    # 第一个参数就是数据,这个数据格式必须是 pandas.DataFrame 格式,同时满足数据准备中所说的条件;filename='bar_chart.mp4',   # 这个参数是生成文件的名字,一般为.mp4 & .gif;orientation='h',    # 方向sort='desc', # 排序n_bars=6, # 限制条形图数量fixed_order=False,  # 固定标签fixed_max=True, # 固定轴的最大值steps_per_period=10,   # 帧数设置interpolate_period=False,  # 插入时间# label_bars=True,   # 是否有labelbar_size=.95,   # 设置bar宽度 取值 0~1 之间;period_label={'x': .99, 'y': .25, 'ha': 'right', 'va': 'center'},# period_fmt='%B %d, %Y',  # 日期的格式设置period_summary_func=lambda v, r: {'x': .99, 'y': .18,'s': r'Total weigth: {v.sum():,.0f}','ha': 'right', 'size': 8, 'family': 'Courier New'},perpendicular_bar_func='median',period_length=500,# figsize=(5, 3),# dpi=144,# cmap='dark12',title='COVID-19 Deaths by Country',# title_size='',# bar_label_size=7,# tick_label_size=7,shared_fontdict={'family' : 'DejaVu Sans', 'color' : '.1'},scale='linear',writer=None,fig=None,bar_kwargs={'alpha': .7},filter_column_colors=False)

4. 详细举例(复制即可用)

4.1 基本条形图

import bar_chart_race as bcr
import pandas as pddf=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,filename='动态条形图.mp4')

效果如图:

4.2 柱状图

使用 orientation 参数,转换图的方向;这里 orientation 有两个可赋予的值 hv

import bar_chart_race as bcr
import pandas as pddf=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,'动态柱状图.mp4',orientation='v')

效果如图:

4.3 排序图

默认情况下,是按照降序排列的,当我们需要升序排列时,使用参数:sort='asc'

import bar_chart_race as bcr
import pandas as pddf=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,'动态柱状图_升序.mp4',sort='asc')

效果如图:

4.4 限制条形图数量

默认情况下,所有的列都会被显示;如果我们需要控制数量,使用参数:n_bars=6,这里数字6,可以改成任意整数;

import bar_chart_race as bcr
import pandas as pddf=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,'动态柱状图_5条形图.mp4',n_bars=5)

效果如图:

4.5 固定条形的顺序

默认情况下,条形图会被按照降序排列,如果我们想固定顺序,使用参数:fixed_order,将其改为True 或者 赋值一个列表;

import bar_chart_race as bcr
import pandas as pddf=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,'动态柱状图_条形固定.mp4',fixed_order=['Apple', 'banana', 'watermelon', 'orange'])

效果如图:

4.6 固定轴的最大值

默认情况下,数值轴的最大值根据时间变换,如果想要固定,使用参数:fixed_max=True

import bar_chart_race as bcr
import pandas as pddf=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,'动态条形图_固定轴的最大值.mp4',fixed_max=True)

效果如图:

4.7 设置帧数

默认情况下,帧数为10,我们可以将这个值改大,使图像更流畅;当然也可以改小;

import bar_chart_race as bcr
import pandas as pddf=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,'动态条形图_设置帧数.mp4',steps_per_period=24)

效果如图:

4.8 设置步长与停留时间

import bar_chart_race as bcr
import pandas as pddf=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,'动态条形图_设置步长与停留时间.mp4',steps_per_period=20, period_length=200)

效果如图:

4.9 添加插入时间

import bar_chart_race as bcr
import pandas as pddf=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,'动态条形图_插入时间.mp4',interpolate_period=True)

4.10 设置字体属性

import bar_chart_race as bcr
import pandas as pddf=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,filename='动态条形图_设置字体属性.mp4',shared_fontdict={'family': 'Helvetica', 'weight': 'bold','color': 'rebeccapurple'})

效果如图:

4.11 定制条形属性

import bar_chart_race as bcr
import pandas as pddf=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,filename='动态条形图_定制条形属性.mp4',bar_kwargs={'alpha': .2, 'ec': 'black', 'lw': 3})

效果如图:

4.12 增加文本说明

这个,目前还没有研究成功,稍后更新~

4.13 增加垂直bar平均值

import bar_chart_race as bcr
import pandas as pddf=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,filename='动态条形图_增加垂直bar平均值.mp4',perpendicular_bar_func='mean')

效果如图:

4.14 自定义垂直bar——最大值

import bar_chart_race as bcr
import pandas as pddf=pd.read_csv('数据.csv',index_col=0)
# 自定义增加垂直bar
def func(values, ranks):return values.max()
bcr.bar_chart_race(df,filename='动态条形图_增加垂直bar自定义最大值.mp4', perpendicular_bar_func=func)

效果如图:

4.15 条形图颜色不重复

import bar_chart_race as bcr
import pandas as pddf=pd.read_csv('数据.csv',index_col=0)
bcr.bar_chart_race(df,filename='动态条形图_条形图颜色不重复.mp4',filter_column_colors=True)

效果如图:

5. 遇到的问题

5.1 [报错] AttributeError: module ‘sip‘ has no attribute ‘setapi‘

问题描述: 导入 import bar_chart_race 报错
最近在导入bar_chart_race 包时,遇到报错:AttributeError: module ‘sip’ has no attribute ‘setapi’
导入的包:

import bar_chart_race as bcr

只是运行导入的语句,就会报错:AttributeError: module ‘sip’ has no attribute ‘setapi’

解决办法:
最后发现这个报错的原因是 matplotlib 库的版本太高,我报错的版本是 3.3.2,将其降级到 3.3.0 就没有问题了;

先卸载:pip uninstall matplotlib

再安装:pip install matplotlib==3.3.0

问题解决!!

5.2 [报错] IndexError: list index out of range

问题描述: 当输出时.gif 格式时(如果是.mp4格式,不会报错),运行时报错:IndexError: list index out of range

解决办法: 下载 :https://imagemagick.org/script/download.php 处的软件,安装即可,但是这个网址下载比较慢,也可以点击这里下载(点击下载); 下载安装,记得在安装时要勾选这两项;

安装完成后,问题解决!!

5.3 [报错] TypeError: bar_chart_race() got an unexpected keyword argument 'figsize'

问题描述: 按照官网的实例进行配置时,发现有一些参数在实际的函数中是没有的,列举如下:

    label_bars=True,   # 是否有labelperiod_fmt='%B %d, %Y',  # 日期的格式设置figsize=(5, 3),dpi=144,cmap='dark12',title_size='',bar_label_size=7,tick_label_size=7,

上面列举的这些参数,在函数中都不包含,我也不知道为什么~ 因为有关这个第三方包的文章,大家都是翻译的官网的例子,并没有人实际求证,所以这个问题,如果大家有知道原因的~ 欢迎大家告诉我呀~ 感谢!!

最简单方法!!用python生成动态条形图(解决报错问题!)相关推荐

  1. python myqr制作二维码生成器_用Python生成动态二维码,只要5行代码,拥有你的个性二维码!...

    原标题:用Python生成动态二维码,只要5行代码,拥有你的个性二维码! 前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. P ...

  2. 用Python生成动态好玩的二维码

    用Python生成动态好玩的二维码 互联网时代可谓是一手机走天下,二维码已经成为我们工作生活中不可或缺的一种媒介了,不管是社交.出行还是支付,二维码已经在熟悉不过了,似乎人人都有一种"见码就 ...

  3. python程序创建词云 中国地图_就这么简单!使用Python生成漂亮的词云

    原标题:就这么简单!使用Python生成漂亮的词云 作者:Linux迷 链接:https://www.linuxmi.com 词云是一种数据可视化技术,用于表示文本数据,其中每个单词的大小表示其出现的 ...

  4. Python发送邮件smtplib.SMTP各报错问题的解决方法

    Python发送邮件smtplib.SMTP各报错问题的解决方法 参考文章: (1)Python发送邮件smtplib.SMTP各报错问题的解决方法 (2)https://www.cnblogs.co ...

  5. python中使用pip安装报错:Fatal error in launcher... 解决方法

    python中使用pip安装报错:Fatal error in launcher... 解决方法 参考文章: (1)python中使用pip安装报错:Fatal error in launcher.. ...

  6. windows下 python 使用 pip 安装TA-Lib报错的原因及解决方法

    windows下 python 使用 pip 安装TA-Lib报错的原因及解决方法 问题环境 问题描述 问题原因 & 解决办法 问题环境 Windows 10 x64 .python 3.8. ...

  7. Python之Datasets库安装报错的解决方法

    Python之Datasets库安装报错的解决方法 Problem 想要run一下最近在看的有关Domain Adaptation的论文实现代码,文中使用了Datasets库,习惯性使用Anacond ...

  8. Python pip install 安装包报错ERROR: Could not find a version that satisfies the requirement XXX解决方法

    Python pip install 安装包报错ERROR: Could not find a version that satisfies the requirement XXX解决方法 文章目录 ...

  9. python 3.8.0 编译报错 Could not import runpy module 解决方案

    环境 CentOS 7 Gcc 4.8.5 Python 3.8.0 相关报错 make build_all CFLAGS_NODIST=" -fprofile-use -fprofile- ...

最新文章

  1. pandas DataFrame(5)-合并DataFrame与Series
  2. java中overload与override的区别
  3. 包头轻工计算机工程学院,包头轻工职业技术学院高职招生
  4. vmware + centos6设置桥接模式
  5. lnmp的php.ini,lamp/lnmp优化3--phpini
  6. 目前最完整的前端框架 Vue.js 全面介绍
  7. 超宽带 DWM1000模块 应用
  8. 根据工资计算税费html,个税计算器2021 - 个人所得税计算器2021 - 最新个人所得税税前工资税后工资计算公式...
  9. JS时间的计算,剩余时间的计算
  10. VS2015 LoadLibrary加载DLL失败的解决方案,GetLastError()返回值193
  11. QT下使用QAxObject打开word文档,文档路径含有空格open出错的解决方法
  12. DS18B20数字温度计 (一) 电气特性, 寄生供电模式和远距离接线
  13. kali在高清屏幕下如何放大字体与图标
  14. ALLEGRO PCB design GXL软件的菜单解释
  15. docsify配置flowchart模块
  16. 又酸啦!华为「天才少年」校招薪资曝光....
  17. ae2020不支持的视频驱动程序_Premiere 2020安装后,不支持视频驱动程序,怎么解决?...
  18. Qt5简单函数计算器
  19. 网狐6603棋牌游戏源码设置前台控制帐号方法
  20. 学习python的第三节课:基础数据

热门文章

  1. ​科普:什么是WiFi 6
  2. 液晶显示器电源板工作原理
  3. 少儿搜索软件测试,有道少儿词典app评测:学习字词好帮手
  4. 苹果小程序闪退 camera组件
  5. Xcode的调试技巧
  6. PAT乙级1008and1009
  7. php 顿号,一字一顿用逗号、顿号、破折号还是省略号?
  8. 英语作文计算机国际会议开幕词,英语学术会议开幕词
  9. LSA(Latent semantic analysis)
  10. react 路由配置以及封装