5行Python程式碼就能實現刷爆全網的動態條形圖!
說起動態圖表,最火的莫過於動態條形圖了。
在B站上搜尋「資料視覺化」這個關鍵詞,可以看到很多與動態條形圖相關的視訊。
好多視訊都達到了上百萬的播放量,屬實厲害。
目前網上實現動態條形圖現成的工具也很多。
比如數可視的「花火hanabi」,嫡數的「鏑數圖表」,以及國外網站「Flourish」。
但是作為一名Pythoner,當然是想要研究一下如何用Python來實現。
之前也看過大佬們通過Matplotlib、Plotly、Pyecharts實現類似的功能,就是程式碼量有點多,看的腦瓜疼。
所以最近發現到了一個庫「Bar Chart Race」,堪稱Python界最強的動態視覺化包。
GitHub地址:
_https://github.com/dexplo/bar_chart_race_
文件地址:
_https://www.dexplo.org/bar_chart_race/_
目前主要有0.1和0.2兩個版本,0.2版本新增動態曲線圖以及Plotly實現的動態條形圖。
庫是挺好的,就是在安裝上有點問題。
在PyCharm的Project Interpreter上只能安裝到0.1版本,功能不太全。
通過pip install bar_chart_race也只能到0.1版本。
最後我選擇將專案從GitHub上下載下來****,再進行安裝。
下載壓縮包,將解壓後的資料夾放置在專案的venv/lib/python3.7/site-packages目錄下。
在虛擬環境下開啟資料夾,命令列執行如下命令完成安裝。
cd 你的專案地址/venv/lib/python3.7/site-packages/bar_chart_race-master
python setup.py install
# 提示成功安裝
# Finished processing dependencies for bar-chart-race==0.2.0
複製程式碼
好了,安裝成功後就可以引入這個第三方庫。
import bar_chart_race as bcr
# 如果出現SSL錯誤,則全域性取消證照驗證
# import ssl
# ssl._create_default_https_context = ssl._create_unverified_context
# 獲取資料
df = bcr.load_dataset('covid19_tutorial')# print(df)
# 生成GIF影像
bcr.bar_chart_race(df, 'covid19_horiz.gif')
複製程式碼
生成了一個GIF圖,具體如下。
3行程式碼Python程式碼就實現了,對大佬封裝好的庫表示膜拜~
這裡因為作者封裝好了資料處理模組,只需要3行程式碼即可。
對於我們而言,是需要載入自己的資料,自己進行處理,所以多了那麼2行。
示例裡的資料直接使用作者提供的,在data資料夾下的covid19_tutorial.csv檔案(GitHub上有)。
經過其封裝好的資料處理函式,得到最終的資料。
另外作者還提供了很多配置引數,供大家選擇。
01 動態條形圖變動態柱狀圖
# orientation='v',生成柱狀圖
bcr.bar_chart_race(df, 'covid19_horiz.gif', orientation='v')
複製程式碼
02 排序方式,預設為降序(desc)
# 設定排序方式,asc-升序
bcr.bar_chart_race(df, 'covid19_horiz.gif', sort='asc')
複製程式碼
03 條目數限制,此處設定為最多出現6條
# 設定最多能顯示的條目數,6條
bcr.bar_chart_race(df, 'covid19_horiz.gif', n_bars=6)
複製程式碼
04 設定固定類目
# 選取如下5個國家的資料
bcr.bar_chart_race(df, 'covid19_horiz.gif', fixed_order=['Iran', 'USA', 'Italy', 'Spain', 'Belgium'])
複製程式碼
05 固定數值軸,使其不發生動態變化
# 設定數值的最大值,固定數值軸
bcr.bar_chart_race(df, 'covid19_horiz.gif', fixed_max=True)
複製程式碼
06 影像幀數,預設10幀,此處設定為3幀,可以發現影像明顯變得有些卡頓
# 影像幀數。數值越小,越不流暢。越大,越流暢。
bcr.bar_chart_race(df, 'covid19_horiz.gif', steps_per_period=3)
複製程式碼
07 設定幀率,單位時間預設為500ms
# 設定20幀的總時間,此處為200ms
bcr.bar_chart_race(df, 'covid19_horiz.gif', steps_per_period=20, period_length=200)
複製程式碼
08 設定每幀增加的標籤時間,預設為False
# 輸出MP4
bcr.bar_chart_race(df, 'covid19_horiz.mp4', interpolate_period=True)
複製程式碼
09 繪圖屬性設定
# 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')
複製程式碼
10 配置標籤文字大小
# 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')
複製程式碼
11 全域性文字屬性
# 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 條形圖屬性,可以設定透明度,邊框等
# bar_kwargs-條形圖屬性
bcr.bar_chart_race(df, 'covid19_horiz.gif', bar_kwargs={'alpha': .2, 'ec': 'black', 'lw': 3})
複製程式碼
13 設定日期標籤的時間格式
# 設定日期格式,預設為'%Y-%m-%d'
bcr.bar_chart_race(df, 'covid19_horiz.gif', period_fmt='%b %-d, %Y')
複製程式碼
14 更改日期標籤為數值
# 設定日期標籤為數值
bcr.bar_chart_race(df.reset_index(drop=True), 'covid19_horiz.gif', interpolate_period=True, period_fmt='Index value - {x:.2f}')
複製程式碼
15 新增動態文字,此處為數值總數統計
# 設定文字位置、數值、大小、顏色等
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 新增垂直條,可選型別有平均值、分位數等
# 設定垂直條數值,分位數
def func(values, ranks):
return values.quantile(.9)
# 新增垂直條
bcr.bar_chart_race(df, 'covid19_horiz.gif', perpendicular_bar_func=func)
複製程式碼
17 設定柱狀圖顏色,預設為dark24
# 設定柱狀圖顏色
bcr.bar_chart_race(df, 'covid19_horiz.gif', cmap='accent')
複製程式碼
18 柱狀圖顏色不重複,上面這個圖是有重複顏色的
# 去除重複顏色
bcr.bar_chart_race(df, 'covid19_horiz.gif', cmap='accent', filter_column_colors=True)
複製程式碼
這裡有一些要注意的地方,比如中文配置,以及自定義顏色配置。
中文配置只需在第三方庫的「_make_chart.py」檔案中,加入如下三行程式碼。
#中文顯示
plt.rcParams['font.sans-serif'] = ['SimHei']
#Windows
plt.rcParams['font.sans-serif'] = ['Hiragino Sans GB']
#Mac
plt.rcParams['axes.unicode_minus'] = False
複製程式碼
現在在圖表中加入中文,來看看結果。
import bar_chart_race as bcr
import pandas as pd
# 讀取資料
df = pd.read_csv('yuhuanshui.csv', encoding='utf-8', header=0, names=['name', 'number', 'day'])
# 處理資料
df_result = pd.pivot_table(df, values='number', index=['day'], columns=['name'], fill_value=0)# print(df_result)
# 生成影像
bcr.bar_chart_race(df_result, 'heat.gif', title='我是餘歡水演職人員熱度排行')
複製程式碼
使用電視劇餘歡水人物的「百度指數」資料。
檔案具體內容如下。
經過資料透視表處理後,得到與該庫格式相同的資料。
想用自己的資料來做動態條形圖,5行程式碼****即可搞定。
此外通過在「_colormaps.py」檔案中新增顏色資訊,經cmap引用,即可自定義配置顏色。
colormaps = {"new_colors": ['#ff812c', '#ff5a5a', '#00c5d2', '#a64dff', '#4e70f0', '#f95dba', '#ffce2b']}
複製程式碼
使用一波,看會不會變得好看一些。
# 使用自定義的顏色列表
bcr.bar_chart_race(df_result, 'heat.gif', title='我是餘歡水演職人員熱度排行', cmap='new_colors')
複製程式碼
果然,看起來還不錯~
還有一些細節上的引數,大家可通過檢視庫的原始碼,來了解一二。
相關文章
- 教你用Python實現全自動刷網課Python
- canvas實現的動態心形效果程式碼例項Canvas
- Python Matplotlib繪製條形圖的全過程Python
- css3實現線條環形動態運動效果CSSS3
- python:動態不刷螢幕輸出python/shell實現Python
- 來~打包實現小程式動態分享圖一條龍服務( ¨̮ )
- Qt實現炫酷啟動圖-動態進度條QT
- 超級炫酷的3D旋轉動態圖——Python程式碼實現3DPython
- 圖形、GDI + 和圖表(在網頁上嵌入動態圖形)網頁
- Android自定義圓形進度條實現程式碼Android
- php生成條形碼的圖片PHP
- python呼叫瀏覽器,實現刷網頁小程式Python瀏覽器網頁
- 60K!剛面完Python!這個被Oracle裁掉的程式設計師求職刷爆全網!PythonOracle程式設計師求職
- 前端實現生成條形碼並下載前端
- 量子圖形加密演算法的MATLAB程式碼實現加密演算法Matlab
- 動態圖和靜態圖的程式碼區別
- java圖形驗證碼實現Java
- NetSuite實現pdf列印中的條形碼的功能UI
- CSS 線條環形動態運動效果CSS
- 拖動滾動條實現網頁內容自動載入程式碼例項網頁
- 圖形驗證碼設計實現
- Java 條形碼生成(一維條形碼)Java
- jQuery動態進度條程式碼例項jQuery
- js實現動態進度條詳解JS
- jquery實現的豎向動態柱狀條效果jQuery
- canvas實現具有粒子效果的動態進度條Canvas
- 投影互動牆的三大實現形態介紹
- 使用PHP實現動態代理IP的示例程式碼PHP
- 我的小程式介面被刷爆了
- Vue.js實現圖形驗證碼Vue.js
- Python實現簡單網頁圖片抓取完整程式碼例項Python網頁
- javascript模擬實現滾動條效果程式碼例項JavaScript
- 拖動滾動條實現div跟隨效果程式碼例項
- vue 實現動態拓撲圖Vue
- Flask SocketIO 實現動態繪圖Flask繪圖
- canvas實現的多邊形程式碼例項Canvas
- web動態驗證碼的實現Web
- 實現動態驗證碼的思路