本回答主要以2020下半年中国最娱乐的人气男明星top10变化动态条形图为例来展示如何用python生成动态条形图。
知乎视频www.zhihu.com一、 python生成动态条形图:以2020下半年中国最娱乐的人气男明星top10变化动态条形图为例。
1. 安装第三方库
1.1
下载第三方库的网址:https://git-scm.com/download/win
(cmd中利用pip install的版本不是2.0,运行时会报错,所以上官网下载最新的会好一些)
首先右击此电脑-属性-查看电脑操作系统位数,本人电脑为64位。
1.2 git安装完毕后,在cmd中切换到想要下载的目录,然后下载:git clone https://github.com/dexplo/bar_chart_race.git
其中,https://github.com/dexplo/bar_chart_race.git 就是它的git地址;
1.3 我这里下载的目录是在:D:程序python
在cmd中进入该文件夹,然后运行:python setup.py install
,安装完成后,会提示:Finished processing dependencies for bar-chart-race==0.2.0
,看到这个,就证明我们成功了!
2. 数据收集及预处理
本文数据从123粉丝网爬取,经处理后如下,最好以date为DataFrame的index(可以私信本人获取此数据,还有1989年-2019年各省市年GDP数据文件):
3. 举例
import bar_chart_race as bcr
import pandas as pd
df=pd.read_csv('男明星人气数据.csv', index_col ='date')
bcr.bar_chart_race(df,filename='动态条形图1.mp4',steps_per_period=24,title='中国最娱乐的男明星人气排行榜(数据源自123粉丝网)')
4.1 默认情况
import bar_chart_race as bcr
import pandas as pd
df=pd.read_csv('男明星人气数据.csv', index_col ='date')
bcr.bar_chart_race(df,filename='动态条形图2.mp4',title='中国最娱乐的男明星人气排行榜(数据源自123粉丝网)')
4.2 设置中文:显示中文
import bar_chart_race as bcr
import pandas as pd
from pylab import * #设置显示中文
mpl.rcParams['font.sans-serif']=['MicroSoft YaHei']#设置中文字体为雅黑
df=pd.read_csv('男明星人气数据.csv', index_col ='date')
bcr.bar_chart_race(df,filename='动态条形图-显示中文.mp4',title='中国最娱乐的男明星人气排行榜(数据源自123粉丝网)')
4.3 转换图的方向
import bar_chart_race as bcr
import pandas as pd
from pylab import * #设置显示中文
mpl.rcParams['font.sans-serif']=['MicroSoft YaHei']#设置中文字体为雅黑
df=pd.read_csv('男明星人气数据.csv', index_col ='date')
bcr.bar_chart_race(df,filename='动态条形图-转换方向.mp4',
orientation='v',#使用 orientation 参数,转换图的方向,’h’和’v’;
title='中国最娱乐的男明星人气排行榜(数据源自123粉丝网)')
4.4 改变排序情况
import bar_chart_race as bcr
import pandas as pd
from pylab import * #设置显示中文
mpl.rcParams['font.sans-serif']=['MicroSoft YaHei']#设置中文字体为雅黑
df=pd.read_csv('男明星人气数据.csv', index_col ='date')
bcr.bar_chart_race(df,filename='动态条形图-改变排序.mp4',
sort='asc'#升序,默认为降序
title='中国最娱乐的男明星人气排行榜(数据源自123粉丝网)')
4.5 设置柱状图条数
import bar_chart_race as bcr
import pandas as pd
from pylab import * #设置显示中文
mpl.rcParams['font.sans-serif']=['MicroSoft YaHei']#设置中文字体为雅黑
df=pd.read_csv('男明星人气数据.csv', index_col ='date')
bcr.bar_chart_race(df,filename='动态条形图-设置柱状条数.mp4',
n_bars=10, #这里本人取10,可以视情况而定
title='中国最娱乐的男明星人气排行榜(数据源自123粉丝网)')
4.6 固定轴的最大值
import bar_chart_race as bcr
import pandas as pd
from pylab import * #设置显示中文
mpl.rcParams['font.sans-serif']=['MicroSoft YaHei']#设置中文字体为雅黑
df=pd.read_csv('男明星人气数据.csv', index_col ='date')
bcr.bar_chart_race(df,filename='动态条形图-设置最大值.mp4',
fixed_max=True,
title='中国最娱乐的男明星人气排行榜(数据源自123粉丝网)')
4.7 设置帧数
#默认情况下,帧数为10,我们可以将这个值改大,使图像更流畅;当然也可以改小;
import bar_chart_race as bcr
import pandas as pd
from pylab import * #设置显示中文
mpl.rcParams['font.sans-serif']=['MicroSoft YaHei']#设置中文字体为雅黑
df=pd.read_csv('男明星人气数据.csv', index_col ='date')
bcr.bar_chart_race(df,filename='动态条形图-设置最大值.mp4',
steps_per_period=24, #设置帧数
title='中国最娱乐的男明星人气排行榜(数据源自123粉丝网)')
4.8 设置步长与停留时间
#
import bar_chart_race as bcr
import pandas as pd
from pylab import * #设置显示中文
mpl.rcParams['font.sans-serif']=['MicroSoft YaHei']#设置中文字体为雅黑
df=pd.read_csv('男明星人气数据.csv', index_col ='date')
bcr.bar_chart_race(df,filename='动态条形图-设置步长与停留时间.mp4',
period_length=2000, #设置步长与停留时间,可以调节数值变化速度
title='中国最娱乐的男明星人气排行榜(数据源自123粉丝网)')
4.9 条形图颜色不重复
#
import bar_chart_race as bcr
import pandas as pd
from pylab import * #设置显示中文
mpl.rcParams['font.sans-serif']=['MicroSoft YaHei']#设置中文字体为雅黑
df=pd.read_csv('男明星人气数据.csv', index_col ='date')
bcr.bar_chart_race(df,filename='动态条形图-条形颜色不重复.mp4',
period_length=2000, #设置步长与停留时间,可以调节数值变化速度
filter_column_colors=True, #条形颜色不重复
title='中国最娱乐的男明星人气排行榜(数据源自123粉丝网)')
二、 报错情况举例和解决方法
1. AttributeError: module ‘sip‘ has no attribute ‘setapi‘
解决办法:
最后发现这个报错的原因是 matplotlib 库的版本太高,我报错的版本是 3.3.2,将其降级到 3.3.0 就没有问题了;
先卸载:pip uninstall matplotlib
再安装:pip install matplotlib==3.3.0
问题解决!!
2. IndexError: list index out of range
解决办法: 下载 :https://imagemagick.org/script/download.php
处的软件,安装即可,但是这个网址下载比较慢; 下载安装,记得在安装时要勾选这两项;
根据系统选择下载版本,我选择的是Windows。
问题解决!!