欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)動態(tài)條形圖繪制的示例代碼

 更新時(shí)間:2022年08月03日 09:24:21   作者:古明地覺  
這篇文章主要為大家詳細(xì)介紹了如何利用Python語言實(shí)現(xiàn)動態(tài)條形圖的繪制,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

兩年前在 B 站上看到了一個(gè)寶藏 up 主,名叫 "Jannchie見齊",專門做動態(tài)條形圖樣式的數(shù)據(jù)可視化。

做出的效果還是很不錯(cuò)的,但工具使用的是 JS,不是 Python。于是嘗試搜索了一下,看看 Python 有沒有相關(guān)的庫,也能輕松做出動態(tài)條形圖的效果。幸運(yùn)的是還真有相關(guān)的庫,叫 bar_chart_race,那么下面就來看看它的用法。

老規(guī)矩,使用之前先安裝,直接 pip install bar-chart-race 即可。

import?pandas?as?pd
import?bar_chart_race?as?bcr

#?如果出現(xiàn)SSL錯(cuò)誤, 則全局取消證書驗(yàn)證
"""
import?ssl
ssl._create_default_https_context?=?\
??ssl._create_unverified_context
"""??

#?獲取數(shù)據(jù)
df?=?pd.read_csv('covid19_tutorial.csv',?
?????????????????index_col=["date"])
#?生成?GIF?圖像
bcr.bar_chart_race(df,?"covid19_horiz.gif")

我們看到代碼非常簡單,就是將數(shù)據(jù)轉(zhuǎn)成 pandas 的 DataFrame,然后調(diào)用 bar_chart_race 即可生成 GIF 圖像。

整體還是不錯(cuò)的,然后重點(diǎn)來看一下數(shù)據(jù):

其中表頭就是 GIF 圖表中 Y 軸的部分,但要注意的是,我們的圖表是隨時(shí)間不斷變化的,所以在生成 DataFrame 的時(shí)候必須將 date 字段設(shè)置為索引。然后數(shù)據(jù)隨著時(shí)間不斷變化,條形圖之間會根據(jù)數(shù)據(jù)的大小進(jìn)行排序。

當(dāng)然了,以上只是默認(rèn)生成的,bar_chart_race 里面還有很多的參數(shù),我們來看一下。

動態(tài)條形圖變動態(tài)柱狀圖

import?pandas?as?pd
import?bar_chart_race?as?bcr

df?=?pd.read_csv('covid19_tutorial.csv',?
?????????????????index_col=["date"])
bcr.bar_chart_race(df,?"covid19_horiz.gif",?
???????????????????orientation='v')

我們看到為了避免文字發(fā)生重疊,自動傾斜了,所以還是比較人性化的。

指定排序方式

排序方式默認(rèn)為降序,也可以指定為升序。

import?pandas?as?pd
import?bar_chart_race?as?bcr

df?=?pd.read_csv('covid19_tutorial.csv',?
?????????????????index_col=["date"])
#?設(shè)置排序方式
bcr.bar_chart_race(df,?"covid19_horiz.gif",?
???????????????????sort='asc')

限制條目數(shù)

import?pandas?as?pd
import?bar_chart_race?as?bcr

df?=?pd.read_csv('covid19_tutorial.csv',?
?????????????????index_col=["date"])
#?設(shè)置最多能顯示的條目數(shù),這里最多顯示?6?條
bcr.bar_chart_race(df,?'covid19_horiz.gif',?
???????????????????n_bars=6)

設(shè)置固定條目

import?pandas?as?pd
import?bar_chart_race?as?bcr

df?=?pd.read_csv('covid19_tutorial.csv',?
?????????????????index_col=["date"])
#?選取如下?5?個(gè)國家的數(shù)據(jù)
bcr.bar_chart_race(df,?'covid19_horiz.gif',?
???????????????????fixed_order=['Iran',?'USA',?'Italy',?
????????????????????????????????'Spain',?'Belgium'])

固定數(shù)值軸,使其不發(fā)生動態(tài)變化

import?pandas?as?pd
import?bar_chart_race?as?bcr

df?=?pd.read_csv('covid19_tutorial.csv',?
?????????????????index_col=["date"])
#?設(shè)置數(shù)值的最大值,固定數(shù)值軸
bcr.bar_chart_race(df,?'covid19_horiz.gif',?
???????????????????fixed_max=True)

設(shè)置圖像幀數(shù),默認(rèn) 10 幀

import?pandas?as?pd
import?bar_chart_race?as?bcr

df?=?pd.read_csv('covid19_tutorial.csv',?
?????????????????index_col=["date"])
#?圖像幀數(shù):數(shù)值越小,越不流暢;越大,越流暢
bcr.bar_chart_race(df,?'covid19_horiz.gif',?
???????????????????steps_per_period=3)

可以看到,動圖變得不流暢了。

設(shè)置幀率,單位時(shí)間默認(rèn)為 500ms

import?pandas?as?pd
import?bar_chart_race?as?bcr

df?=?pd.read_csv('covid19_tutorial.csv',?
?????????????????index_col=["date"])
#?設(shè)置幀率為?200ms,總共?20?幀
bcr.bar_chart_race(df,?'covid19_horiz.gif',?
???????????????????steps_per_period=20,?
???????????????????period_length=200)

設(shè)置每幀增加的標(biāo)簽時(shí)間,默認(rèn)為 False

import?pandas?as?pd
import?bar_chart_race?as?bcr

df?=?pd.read_csv('covid19_tutorial.csv',?
?????????????????index_col=["date"])
bcr.bar_chart_race(df,?'covid19_horiz.gif',?
???????????????????interpolate_period=True)

 

圖形樣式設(shè)置

import?pandas?as?pd
import?bar_chart_race?as?bcr

df?=?pd.read_csv('covid19_tutorial.csv',?index_col=["date"])
"""
figsize:?設(shè)置畫布大小,默認(rèn)?(6,?3.5)
dpi:?圖像分辨率,默認(rèn)?144
label_bars:?顯示柱狀圖的數(shù)值信息,默認(rèn)為 True;
????????????指定為 False 則不顯示;指定為字典,則自定義顯示屬性
period_label:?顯示時(shí)間標(biāo)簽信息,默認(rèn)為 True;
??????????????指定為 False 則不顯示;指定為字典,則自定義顯示屬性
period_fmt:?設(shè)置日期格式
title:?圖表標(biāo)題
title_size:?標(biāo)題字體大小
shared_fontdict:?全局字體屬性,例如?
?????????????????{'family':?'Helvetica',?'weight':?'bold',?
??????????????????'color':?'rebeccapurple'}
"""
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')

條形圖屬性,可以設(shè)置透明度,邊框等

import?pandas?as?pd
import?bar_chart_race?as?bcr

df?=?pd.read_csv('covid19_tutorial.csv',?
?????????????????index_col=["date"])
# bar_kwargs:條形圖屬性
bcr.bar_chart_race(df,?'covid19_horiz.gif',?
???????????????????bar_kwargs={'alpha':?.2,?
???????????????????????????????'ec':?'black',?
???????????????????????????????'lw':?3})

添加動態(tài)文本

import?pandas?as?pd
import?bar_chart_race?as?bcr
import?matplotlib.pyplot?as?plt

#?設(shè)置字體,否則無法顯示中文
plt.rcParams['font.sans-serif']?=?['SimHei']??#?Windows
#?plt.rcParams['font.sans-serif']?=?['Hiragino?Sans?GB']?#?Mac
plt.rcParams['axes.unicode_minus']?=?False

df?=?pd.read_csv('covid19_tutorial.csv',?index_col=["date"])

def?summary(values,?ranks):
????#?動態(tài)文本的內(nèi)容
????"""
????values?為?df?的每一行(Series),例如
????????Belgium????????????1143.0
????????China??????????????3326.0
????????France?????????????6520.0
????????Germany????????????1275.0
????????Iran???????????????3294.0
????????Italy?????????????14681.0
????????Netherlands????????1490.0
????????Spain?????????????11198.0
????????USA????????????????7418.0
????????United?Kingdom?????3611.0
????????Name:?2020-04-03,?dtype:?float64

????ranks?則是針對?values?的值進(jìn)行了排名,例如
????????Belgium????????????1.0
????????China??????????????5.0
????????France?????????????7.0
????????Germany????????????2.0
????????Iran???????????????4.0
????????Italy?????????????10.0
????????Netherlands????????3.0
????????Spain??????????????9.0
????????USA????????????????8.0
????????United?Kingdom?????6.0
????????Name:?2020-04-03,?dtype:?float64
????"""
????all_people?=?int(values.sum())
????ranks_country?=?ranks.sort_values().index
????s?=?(f'總死亡人數(shù):{all_people},'
?????????f'死亡人數(shù)最多的國家:{ranks_country[-1]},'
?????????f'死亡人數(shù)最少的國家:{ranks_country[0]}')
????#?設(shè)置文本位置、數(shù)值、大小、顏色等
????return?{'x':?.99,?'y':?.05,?'s':?s,
????????????'ha':?'right',?'size':?8}

#?添加文本
bcr.bar_chart_race(df,?'covid19_horiz.gif',
???????????????????period_summary_func=summary)

添加垂直條

import?pandas?as?pd
import?bar_chart_race?as?bcr

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

設(shè)置柱狀圖顏色

import?pandas?as?pd
import?bar_chart_race?as?bcr

df?=?pd.read_csv('covid19_tutorial.csv',?
?????????????????index_col=["date"])
"""
#?具體有哪些顏色,可以通過如下方式查看
from?bar_chart_race._colormaps?import?colormaps
print(list(colormaps.keys()))
"""
bcr.bar_chart_race(df,?'covid19_horiz.gif',?
???????????????????cmap="plotly3")

以上就是絕大部分配置,當(dāng)然源碼中注釋寫的也比較詳細(xì),可以點(diǎn)進(jìn)去看一下。

到此這篇關(guān)于Python實(shí)現(xiàn)動態(tài)條形圖繪制的示例代碼的文章就介紹到這了,更多相關(guān)Python動態(tài)條形圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論