刷爆網(wǎng)絡(luò)的動態(tài)條形圖,3行Python代碼就能搞定

上次出了一個在網(wǎng)站「Flourish」畫動態(tài)條形圖的文章【動態(tài)條形圖視頻教程】,需要登錄網(wǎng)址很多人可能覺得不方便,現(xiàn)在有大佬出了個Python包,只需幾行代碼就能搞定動態(tài)條形圖,非常強大,給大家分享下。
一、前期準(zhǔn)備工作
1、官方參考文檔
GitHub :https://github.com/dexplo/bar_chart_race
說明文檔:https://www.dexplo.org/bar_chart_race/
2、軟件安裝(該安裝方法只能安裝0.1版本)
pip install bar_chart_raceconda install -c conda-forge bar_chart_race
0.2版本需要到github安裝
壓縮包解壓到軟件安裝目錄的/site-packages目錄下,利用命令行安裝即可
3、安裝ffmpeg、ImageMagick?
ffmpeg包:不然無法輸出 mp4/m4v/mov/等格式的視頻,該包比較復(fù)雜,需要配置變量環(huán)境,具體操作可以看看這個博客:
https://baijiahao.baidu.com/s?id=1660327134602942057&wfr=spider&for=pc
ImageMagick包:如果你要創(chuàng)建GIF,需要安裝這個包ImageMagick,安裝方法與上述類似。
二、官方數(shù)據(jù)畫圖
上述準(zhǔn)備都做好了,那就可以開始畫圖了,利用官方提供的數(shù)據(jù),直接加載就可以,我的數(shù)據(jù)下載沒成功,所以自己上傳數(shù)據(jù)繪圖,等下回講怎么自己上傳數(shù)據(jù)。
#加載包import bar_chart_race as bcr#下載數(shù)據(jù)df?=?bcr.load_dataset('covid19_tutorial')#生成GIF圖像bcr.bar_chart_race(df,?'covid19_horiz.gif')#生成MP4bcr.bar_chart_race(df, 'covid19_horiz.MP4')
生成的GIF

生成的MP4
三、自己的數(shù)據(jù)畫圖
如果是自己的數(shù)據(jù),要進行一定的處理,達到畫圖格式,不然會報錯。
#讀取數(shù)據(jù)df = pd.read_csv('data.csv')#格式處理,需要把日期date轉(zhuǎn)換成索引,不能作為單獨一列df?=?df.set_index(keys='date')作者也提供了兩個處理數(shù)據(jù)的函數(shù)bcr.prepare_wide_data?bcr.prepare_long_data
原始數(shù)據(jù)

處理后數(shù)據(jù)(date轉(zhuǎn)換成了索引)

下面是個我自己制作的一個視頻,金庸小說人氣排行榜,數(shù)據(jù)獲取,關(guān)注公眾號【AI入門學(xué)習(xí)】,回復(fù)「條形圖」即可獲取。
import?osimport bar_chart_race as bcrimport?pandas?as?pddata_path = 'C:/Users/wuzhengxiang/Desktop/百度指數(shù)'os.chdir(data_path)#設(shè)置當(dāng)前工作空間print?(os.getcwd())#獲得當(dāng)前工作目錄df = pd.read_csv('金庸小說人氣排行榜.csv')df?=?df.set_index(keys='date')# 生成mp4圖像bcr.bar_chart_race(df,filename='金庸小說人氣排行榜.MP4',steps_per_period = 30,period_length = 1000,title='金庸小說人氣排行榜')
四、圖形美化
作者還提供了很多參數(shù),對圖形進行調(diào)整和美化,輸出的圖形更漂亮
1、橫轉(zhuǎn)縱?Vertical bars
#orientation='v',.gif變成MP4即可輸出視頻bcr.bar_chart_race(df, 'covid19_horiz.gif', orientation='v')

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

3、類目數(shù)限制,此處設(shè)置為最多出現(xiàn)6條
#?設(shè)置最多能顯示的條目數(shù) n_bars=6bcr.bar_chart_race(df, 'covid19_horiz.gif', n_bars=6)
4、設(shè)置展示類目
# 選取如下5個國家的數(shù)據(jù) fixed_orderbcr.bar_chart_race(df, 'covid19_horiz.gif',fixed_order=['Iran', 'USA', 'Italy', 'Spain', 'Belgium'])
5、固定坐標(biāo)軸
#設(shè)置數(shù)值的最大值,固定數(shù)值軸fixed_maxbcr.bar_chart_race(df, 'covid19_horiz.gif', fixed_max=True)

6、改變圖像幀數(shù)
#圖像幀數(shù),數(shù)值越小,越不流暢。越大,越流暢。默認為10比較流暢,改為3就有些卡頓了bcr.bar_chart_race(df, 'covid19_horiz.gif', steps_per_period=3)

7、設(shè)置幀率,默認為500ms
# 設(shè)置20幀的總時間,此處為200msbcr.bar_chart_race(df, 'covid19_horiz.gif',steps_per_period=20, period_length=200)

8、設(shè)置每幀增加的標(biāo)簽時間,默認為False
# 輸出gifbcr.bar_chart_race(df, 'covid19_horiz.gif', interpolate_period=True)

9、繪圖屬性設(shè)置
# figsize-設(shè)置畫布大小,默認(6, 3.5)# dpi-圖像分辨率,默認144# label_bars-顯示柱狀圖的數(shù)值信息,默認為True# period_label-顯示時間標(biāo)簽信息,默認為True# title-圖表標(biāo)題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、配置標(biāo)簽文字大小
# bar_label_size-柱狀圖標(biāo)簽文字大小# tick_label_size-坐標(biāo)軸標(biāo)簽文字大小# title_size-標(biāo)題標(biāo)簽文字大小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、全局字體屬性設(shè)置
# 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、透明度,邊框等設(shè)置
# bar_kwargs-條形圖屬性設(shè)置參數(shù)bcr.bar_chart_race(df, 'covid19_horiz.gif',bar_kwargs={'alpha': .2, 'ec': 'black', 'lw': 3})

13、日期格式設(shè)置
# 設(shè)置日期格式,默認為'%Y-%m-%d'bcr.bar_chart_race(df, 'covid19_horiz.gif', period_fmt='%b %-d, %Y')

14、改日期標(biāo)簽為數(shù)值格式
# 設(shè)置日期標(biāo)簽為數(shù)值bcr.bar_chart_race(df.reset_index(drop=True), 'covid19_horiz.gif', interpolate_period=True,period_fmt='Index value - {x:.2f}')

15、添加匯總統(tǒng)計
#設(shè)置文本位置、數(shù)值、大小、顏色等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、添加垂直條參考線(平均值、分位數(shù)等)

# 設(shè)置垂直條數(shù)值,分位數(shù)def func(values, ranks):return values.quantile(.9)# 添加垂直條bcr.bar_chart_race(df, 'covid19_horiz.gif',???????????????????perpendicular_bar_func=func)

17、設(shè)置柱狀圖顏色
'dark12' is the default colormap. If there are more than 10 columns,?then the default colormap will be 'dark24'
# 設(shè)置柱狀圖顏色bcr.bar_chart_race(df, 'covid19_horiz.gif', cmap='accent')

18、顏色不重復(fù)
#filter_column_colors保證顏色不重復(fù)bcr.bar_chart_race(df, 'covid19_horiz.gif',cmap='accent',filter_column_colors=True)

19、中文支持配置
中文配置只需在第三方庫的_make_chart.py文件中,加入如下三行代碼。
#中文顯示plt.rcParams['font.sans-serif'] = ['SimHei'] #Windowsplt.rcParams['font.sans-serif'] = ['Hiragino Sans GB'] #Macplt.rcParams['axes.unicode_minus'] = False
如果上述方法行不通,請參考文章:https://ask.hellobi.com/blog/safa/36673
20、自定義顏色
此外通過在「_colormaps.py」文件中添加顏色信息,經(jīng)cmap引用,即可自定義配置顏色。
colormaps?=?{"new_colors": ['#ff812c','#ff5a5a','#00c5d2','#a64dff','#4e70f0','#f95dba','#ffce2b']}
獲取文章中的數(shù)據(jù),關(guān)注公眾號【AI入門學(xué)習(xí)】,回復(fù)「條形圖」即可
【完】
往期精彩:
卷積神經(jīng)網(wǎng)絡(luò)可視化神器CNN Explainer


