刷爆網絡的動態條形圖,3行Python代碼就能搞定

刷爆網絡的動態條形圖,3行Python代碼就能搞定

上次出了一個在網站「Flourish」畫動態條形圖的文章【動態條形圖視頻教程】,需要登錄網址很多人可能覺得不方便,現在有大佬出了個Python包,只需幾行代碼就能搞定動態條形圖,非常強大,給大家分享下。


一、前期準備工作

1、官方參考文檔

GitHub :https://github.com/dexplo/bar_chart_race

說明文檔:https://www.dexplo.org/bar_chart_race/


2、軟件安裝(該安裝方法只能安裝0.1版本)

<code>pip install bar_chart_raceconda install -c conda-forge bar_chart_race/<code>

0.2版本需要到github安裝

刷爆網絡的動態條形圖,3行Python代碼就能搞定

壓縮包解壓到軟件安裝目錄的/site-packages目錄下,利用命令行安裝即可


3、安裝ffmpeg、ImageMagick

ffmpeg包:不然無法輸出 mp4/m4v/mov/等格式的視頻,該包比較複雜,需要配置變量環境,具體操作可以看看這個博客:

https://baijiahao.baidu.com/s?id=1660327134602942057&wfr=spider&for=pc

ImageMagick包:如果你要創建GIF,需要安裝這個包ImageMagick,安裝方法與上述類似。


二、官方數據畫圖

上述準備都做好了,那就可以開始畫圖了,利用官方提供的數據,直接加載就可以,我的數據下載沒成功,所以自己上傳數據繪圖,等下回講怎麼自己上傳數據。

<code>#加載包import bar_chart_race as bcr#下載數據df = bcr.load_dataset('covid19_tutorial')#生成GIF圖像bcr.bar_chart_race(df, 'covid19_horiz.gif')#生成MP4bcr.bar_chart_race(df, 'covid19_horiz.MP4')/<code> 

生成的GIF

刷爆網絡的動態條形圖,3行Python代碼就能搞定

生成的MP4


三、自己的數據畫圖

如果是自己的數據,要進行一定的處理,達到畫圖格式,不然會報錯。

<code>#讀取數據df = pd.read_csv('data.csv')#格式處理,需要把日期date轉換成索引,不能作為單獨一列
df = df.set_index(keys='date')
作者也提供了兩個處理數據的函數
bcr.prepare_wide_data 
bcr.prepare_long_data/<code>

原始數據

刷爆網絡的動態條形圖,3行Python代碼就能搞定

處理後數據(date轉換成了索引)

刷爆網絡的動態條形圖,3行Python代碼就能搞定


下面是個我自己製作的一個視頻,金庸小說人氣排行榜,數據獲取,關-注【AI入門學習】,回覆「條形圖」即可獲取。


<code>import osimport bar_chart_race as bcr
import pandas as pd
data_path = 'C:/Users/wuzhengxiang/Desktop/百度指數'
os.chdir(data_path)#設置當前工作空間
print (os.getcwd())#獲得當前工作目錄
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='金庸小說人氣排行榜'                  )/<code>


四、圖形美化

作者還提供了很多參數,對圖形進行調整和美化,輸出的圖形更漂亮

1、橫轉縱 Vertical bars



<code>import osimport bar_chart_race as bcr
import pandas as pd
data_path = 'C:/Users/wuzhengxiang/Desktop/百度指數'
os.chdir(data_path)#設置當前工作空間
print (os.getcwd())#獲得當前工作目錄
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='金庸小說人氣排行榜'                  )/<code>
刷爆網絡的動態條形圖,3行Python代碼就能搞定


2、升序排序

<code># 排序方式,sort='asc'-升序bcr.bar_chart_race(df, 'covid19_horiz.gif', sort='asc')/<code>
刷爆網絡的動態條形圖,3行Python代碼就能搞定


3、類目數限制,此處設置為最多出現6條



<code>#orientation='v',.gif變成MP4即可輸出視頻bcr.bar_chart_race(df, 'covid19_horiz.gif', orientation='v')/<code>
<code>/<code>


4、設置展示類目

<code># 選取如下5個國家的數據 fixed_orderbcr.bar_chart_race(df, 'covid19_horiz.gif', fixed_order=['Iran', 'USA', 'Italy', 'Spain', 'Belgium'])/<code>


5、固定座標軸



<code>#設置數值的最大值,固定數值軸fixed_maxbcr.bar_chart_race(df, 'covid19_horiz.gif', fixed_max=True)/<code>
刷爆網絡的動態條形圖,3行Python代碼就能搞定


6、改變圖像幀數



<code># 設置最多能顯示的條目數 n_bars=6bcr.bar_chart_race(df, 'covid19_horiz.gif', n_bars=6)/<code>
刷爆網絡的動態條形圖,3行Python代碼就能搞定


7、設置幀率,默認為500ms

<code>/<code>
刷爆網絡的動態條形圖,3行Python代碼就能搞定


8、設置每幀增加的標籤時間,默認為False

<code># 輸出gifbcr.bar_chart_race(df, 'covid19_horiz.gif', interpolate_period=True)/<code>
刷爆網絡的動態條形圖,3行Python代碼就能搞定


9、繪圖屬性設置

<code># 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')/<code>
刷爆網絡的動態條形圖,3行Python代碼就能搞定


10、配置標籤文字大小

<code># 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')/<code>
刷爆網絡的動態條形圖,3行Python代碼就能搞定


11、全局字體屬性設置

<code># shared_fontdict-全局字體屬性bcr.bar_chart_race(df, 'covid19_horiz.gif',                         title='COVID-19 Deaths by Country',                        shared_fontdict={'family': 'Helvetica', 'weight': 'bold',                        'color': 'rebeccapurple'})/<code>
刷爆網絡的動態條形圖,3行Python代碼就能搞定


12、透明度,邊框等設置

<code># bar_kwargs-條形圖屬性設置參數bcr.bar_chart_race(df, 'covid19_horiz.gif', bar_kwargs={'alpha': .2, 'ec': 'black', 'lw': 3})/<code>
刷爆網絡的動態條形圖,3行Python代碼就能搞定


13、日期格式設置

<code># 設置日期格式,默認為'%Y-%m-%d'bcr.bar_chart_race(df, 'covid19_horiz.gif', period_fmt='%b %-d, %Y')/<code>
刷爆網絡的動態條形圖,3行Python代碼就能搞定


14、改日期標籤為數值格式

<code># 設置日期標籤為數值bcr.bar_chart_race(df.reset_index(drop=True), 'covid19_horiz.gif', interpolate_period=True,                                  period_fmt='Index value - {x:.2f}')/<code>
刷爆網絡的動態條形圖,3行Python代碼就能搞定


15、添加彙總統計

<code>#設置文本位置、數值、大小、顏色等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/<code>
刷爆網絡的動態條形圖,3行Python代碼就能搞定


16、添加垂直條參考線(平均值、分位數等)

刷爆網絡的動態條形圖,3行Python代碼就能搞定

<code># 設置垂直條數值,分位數def func(values, ranks):    return values.quantile(.9)# 添加垂直條bcr.bar_chart_race(df, 'covid19_horiz.gif',                    perpendicular_bar_func=func)/<code>
刷爆網絡的動態條形圖,3行Python代碼就能搞定


17、設置柱狀圖顏色

'dark12' is the default colormap. If there are more than 10 columns, then the default colormap will be 'dark24'

<code># 設置柱狀圖顏色bcr.bar_chart_race(df, 'covid19_horiz.gif', cmap='accent')/<code>
刷爆網絡的動態條形圖,3行Python代碼就能搞定


18、顏色不重複

<code>#filter_column_colors保證顏色不重複bcr.bar_chart_race(df, 'covid19_horiz.gif',                cmap='accent',                filter_column_colors=True)/<code>
刷爆網絡的動態條形圖,3行Python代碼就能搞定


19、中文支持配置

中文配置只需在第三方庫的_make_chart.py文件中,加入如下三行代碼。

<code>#中文顯示plt.rcParams['font.sans-serif'] = ['SimHei']  #Windowsplt.rcParams['font.sans-serif'] = ['Hiragino Sans GB'] #Macplt.rcParams['axes.unicode_minus'] = False/<code>

如果上述方法行不通,請參考文章:https://ask.hellobi.com/blog/safa/36673


20、自定義顏色

此外通過在「_colormaps.py」文件中添加顏色信息,經cmap引用,即可自定義配置顏色。












<code>colormaps = {    "new_colors": [        '#ff812c',        '#ff5a5a',        '#00c5d2',        '#a64dff',        '#4e70f0',        '#f95dba',        '#ffce2b']}/<code>


獲取文章中的數據,【AI入門學習】,回覆「條形圖」即可


分享到:


相關文章: