如何用python绘制条形图(最简单方法用python生成动态条形图)
如何用python绘制条形图(最简单方法用python生成动态条形图)使用 orientation 参数,转换图的方向;这里 orientation 有两个可赋予的值 h 和 v ;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=
最近非常流行动态条形图,在B站等视频网站上,此类视频经常会有上百万的播放量,今天我们通过第三方库:bar_chart_race (0.2 版本)来实现动态条形图的生成;生成的效果如图:
问题:我发现按照目前流行的文章里操作,会有很多的报错,有一些我解决了,有一些我还没有解决,现在把目前的进展记录在这里;
首先,我们要明白:只有 0.2版本才支持动态条形图,所以我们必须保证我们安装的第三方库为 0.2版本;
遗憾的是,我们通过pip install bar_chart_race 命令安装的第三方包,版本是0.1,也无法升级;所以,这里我们推荐在github上下载,然后安装;安装步骤如下:
- 首先要保证已经安装了github 软件,如果没有,windows 请在这里下载:https://git-scm.com/download/win 点击自己的版本下载,然后安装;其他系统也是一样滴~~
- 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 - 在cmd中进入该文件夹,然后运行:python setup.py install,安装完成后,会提示:Finished processing dependencies for bar-chart-race==0.2.0 ,看到这个,就证明我们成功了!
数据需要满足以下条件:
- 每一行必须是一个单独日期的数据;
- 每一列是一个单独的分类;
- 索引最好是日期数据(可选项);
- 数据必须变化成 pandas.DataFrame 格式;
官网 https://www.dexplo.org/bar_chart_race/, 官网的举例如下:
dateBelgiumChinaFranceGermanyIranItalyNetherlandsSpainUSAUnited Kingdom2020-04-08224033371088723493993176692255147921470471112020-04-09252333391222826074110182792403154471655379932020-04-10301933401321527674232188492520160811859589742020-04-11334633431385128944357194682653166062047198922020-04-12360033431441230224474198992747172092203210629
但是,由于官网上的例子都是使用 df = bcr.load_dataset('covid19_tutorial') 加载的,而我们如果不翻墙的话,是无法加载这个数据的,我把供大家练习的数据放在这里:点击下载练习数据;
3. 函数讲解第三方模块bar_chart_race,只有两个函数来生成我们的动态图,
- 动态条形图:bar_chart_race.bar_chart_race();下面详细解释一下这个函数中所有的参数:
- 动态线形图: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 # 是否有label
bar_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)
12345678910111213141516171819202122232425262728293031323334353637
4. 详细举例(复制即可用)4.1 基本条形图
import bar_chart_race as bcr
import pandas as pd
df=pd.read_csv('数据.csv' index_col=0)
bcr.bar_chart_race(df filename='动态条形图.mp4')
12345
效果如图:
使用 orientation 参数,转换图的方向;这里 orientation 有两个可赋予的值 h 和 v ;
import bar_chart_race as bcr
import pandas as pd
df=pd.read_csv('数据.csv' index_col=0)
bcr.bar_chart_race(df '动态柱状图.mp4' orientation='v')
12345
效果如图:
默认情况下,是按照降序排列的,当我们需要升序排列时,使用参数:sort='asc'
import bar_chart_race as bcr
import pandas as pd
df=pd.read_csv('数据.csv' index_col=0)
bcr.bar_chart_race(df '动态柱状图_升序.mp4' sort='asc')
12345
效果如图:
默认情况下,所有的列都会被显示;如果我们需要控制数量,使用参数:n_bars=6,这里数字6,可以改成任意整数;
import bar_chart_race as bcr
import pandas as pd
df=pd.read_csv('数据.csv' index_col=0)
bcr.bar_chart_race(df '动态柱状图_5条形图.mp4' n_bars=5)
12345
效果如图:
默认情况下,条形图会被按照降序排列,如果我们想固定顺序,使用参数:fixed_order,将其改为True 或者 赋值一个列表;
import bar_chart_race as bcr
import pandas as pd
df=pd.read_csv('数据.csv' index_col=0)
bcr.bar_chart_race(df '动态柱状图_条形固定.mp4' fixed_order=['Apple' 'banana' 'watermelon' 'orange'])
12345
效果如图:
默认情况下,数值轴的最大值根据时间变换,如果想要固定,使用参数:fixed_max=True。
import bar_chart_race as bcr
import pandas as pd
df=pd.read_csv('数据.csv' index_col=0)
bcr.bar_chart_race(df '动态条形图_固定轴的最大值.mp4' fixed_max=True)
12345
效果如图:
默认情况下,帧数为10,我们可以将这个值改大,使图像更流畅;当然也可以改小;
import bar_chart_race as bcr
import pandas as pd
df=pd.read_csv('数据.csv' index_col=0)
bcr.bar_chart_race(df '动态条形图_设置帧数.mp4' steps_per_period=24)
12345
效果如图:
import bar_chart_race as bcr
import pandas as pd
df=pd.read_csv('数据.csv' index_col=0)
bcr.bar_chart_race(df '动态条形图_设置步长与停留时间.mp4' steps_per_period=20 period_length=200)
12345
效果如图:
import bar_chart_race as bcr
import pandas as pd
df=pd.read_csv('数据.csv' index_col=0)
bcr.bar_chart_race(df '动态条形图_插入时间.mp4' interpolate_period=True)
12345
4.10 设置字体属性
import bar_chart_race as bcr
import pandas as pd
df=pd.read_csv('数据.csv' index_col=0)
bcr.bar_chart_race(df filename='动态条形图_设置字体属性.mp4' shared_fontdict={'family': 'Helvetica' 'weight': 'bold' 'color': 'rebeccapurple'})
12345
效果如图:
import bar_chart_race as bcr
import pandas as pd
df=pd.read_csv('数据.csv' index_col=0)
bcr.bar_chart_race(df filename='动态条形图_定制条形属性.mp4' bar_kwargs={'alpha': .2 'ec': 'black' 'lw': 3})
12345
效果如图:
这个,目前还没有研究成功,稍后更新~
4.13 增加垂直bar平均值import bar_chart_race as bcr
import pandas as pd
df=pd.read_csv('数据.csv' index_col=0)
bcr.bar_chart_race(df filename='动态条形图_增加垂直bar平均值.mp4' perpendicular_bar_func='mean')
12345
效果如图:
import bar_chart_race as bcr
import pandas as pd
df=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)
12345678
效果如图:
import bar_chart_race as bcr
import pandas as pd
df=pd.read_csv('数据.csv' index_col=0)
bcr.bar_chart_race(df filename='动态条形图_条形图颜色不重复.mp4' filter_column_colors=True)
12345
效果如图:
问题描述: 导入 import bar_chart_race 报错
最近在导入bar_chart_race 包时,遇到报错:AttributeError: module ‘sip’ has no attribute ‘setapi’
导入的包:
import bar_chart_race as bcr
1
只是运行导入的语句,就会报错: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 处的软件,安装即可,但是这个网址下载比较慢,也可以点击这里下载(点击下载); 下载安装,记得在安装时要勾选这两项;
安装完成后,问题解决!!
问题描述: 按照官网的实例进行配置时,发现有一些参数在实际的函数中是没有的,列举如下:
label_bars=True # 是否有label
period_fmt='%B %d %Y' # 日期的格式设置
figsize=(5 3)
dpi=144
cmap='dark12'
title_size=''
bar_label_size=7
tick_label_size=7
12345678
上面列举的这些参数,在函数中都不包含,我也不知道为什么~ 因为有关这个第三方包的文章,大家都是翻译的官网的例子,并没有人实际求证,所以这个问题,如果大家有知道原因的~ 欢迎大家告诉我呀~ 感谢!!