一文教你如何使用Python繪制瀑布圖
什么是瀑布圖?瀑布圖用表達(dá)兩個(gè)數(shù)值之間的變化過程,過程值為正的時(shí)候,向上加,過程值為負(fù)的時(shí)候向下減[1]。
今天分享在Python中繪制瀑布圖的3種簡(jiǎn)單方法(使用不同的庫)!
前期準(zhǔn)備
首先先安裝所需的庫:
pip?install?waterfallcharts?(注意該庫名) pip?install?waterfall_ax?(注意該庫名) pip?install?plotly
接著導(dǎo)入要搭配使用的Pandas庫和Matplotlib庫:
import?pandas?as?pd import?matplotlib.pyplot?as?plt plt.rcParams["figure.figsize"]?=?(16,?8) plt.rcParams['font.sans-serif']?=?['SimHei'] plt.rcParams['axes.unicode_minus']?=?False
準(zhǔn)備一些模擬數(shù)據(jù),用于后續(xù)不同的Python庫繪制瀑布圖。
df?=?pd.DataFrame( ????data={ ????????"time":?["2021?end",?"Jan",?"Feb",?"Mar",?"Apr",?"May",?"Jun",?"Jul",?"Aug",?"Sep",?"Oct",?"Nov",?"Dec"], ????????"users":?[100,?120,?110,?150,?160,?190,?240,?200,?230,?240,?250,?280,?300] ????} )
方法一:waterfall_ax
首先我們使用waterfall_ax
庫,它是基于 Matplotlib 來創(chuàng)建靈活的瀑布圖。
https://github.com/microsoft/waterfall_ax
from?waterfall_ax?import?WaterfallChart fig,?ax?=?plt.subplots(1,?1,?figsize=(16,?8)) waterfall?=?WaterfallChart(df["users"].to_list()) wf_ax?=?waterfall.plot_waterfall(ax=ax,?title="人生苦短,快學(xué)Python!")
需要注意一點(diǎn),waterfall_ax
這個(gè)庫使用的是 Python 列表,所以在上面代碼中我們將Pandas的"users"列通過to_list
轉(zhuǎn)為了列表。
此外,我們還可以增加更多的參數(shù),如下所示:
fig,?ax?=?plt.subplots(1,?1,?figsize=(16,?8)) waterfall?=?WaterfallChart( ????df["users"].to_list(), ????step_names=df["time"].to_list(),? ????metric_name="#?users",? ????last_step_label="now" ) wf_ax?=?waterfall.plot_waterfall(ax=ax,?title="人生苦短,快學(xué)Python!")
方法二:waterfall_chart
方法二是使用waterfall_chart
庫,不過會(huì)較上一個(gè)方法多一個(gè)步驟,即需要加一個(gè)包含增量的列[2]。如下所示,我們可以向dataframe中添加一個(gè)新列并計(jì)算得到增量diff
。
import?waterfall_chart df_1?=?df.copy() df_1["delta"]?=?df_1["users"].diff().fillna(100) df_1
在交互式環(huán)境中輸入如下命令,
waterfall_chart.plot(df_1["time"],?df_1["delta"])
運(yùn)行輸出:
waterfall_chart
庫同樣也可以增加其他參數(shù),本文不再做單獨(dú)展示。
方法三:plotly
前面的兩種方法相對(duì)來說比較小眾一點(diǎn),那么方法三用到的plotly
庫大家一定都比較熟悉。與waterfall_chart
庫一樣,在繪制之前也需要多一步進(jìn)行數(shù)據(jù)處理。
df_2?=?df_1.copy() df_2["delta_text"]?=?df_2["delta"].astype(str) df_2["measure"]?=?["absolute"]?+?(["relative"]?*?12) df_2
在交互式環(huán)境中輸入如下命令:
fig?=?go.Figure( ????go.Waterfall( ????????measure=df_2["measure"], ????????x=df_2["time"], ????????textposition="outside", ????????text=df_2["delta_text"], ????????y=df_2["delta"], ????) ) fig.update_layout( ????title="人生苦短,快學(xué)Python!", ????showlegend=False ) fig.show()
使用plotly
庫有一個(gè)非常大的優(yōu)勢(shì),這些圖是完全交互的,我們可以放大,也可以通過選項(xiàng)來獲取更多信息,如下圖所示。
另外,與之前兩種方法繪制的圖相比,剛剛plotly
庫繪制的圖少了一個(gè)“柱子”顯示凈/總計(jì)??梢赃@樣處理:
total_row?=?pd.DataFrame( ????data={ ????????"time":?"now",? ????????"users":?0,? ????????"delta":0,? ????????"delta_text":?"",? ????????"measure":?"total" ????},? ????index=[0] ) df_3?=?pd.concat([df_2,?total_row],?ignore_index=True)
用于生成瀑布圖的Python代碼實(shí)際上并未改變,唯一的區(qū)別是我們使用的DataFrame增加一個(gè)額外行。
fig?=?go.Figure( ????go.Waterfall( ????????measure=df_3["measure"], ????????x=df_3["time"], ????????textposition="outside", ????????text=df_3["delta_text"], ????????y=df_3["delta"], ????) ) fig.update_layout( ????title="人生苦短,快學(xué)Python!", ????showlegend=False ) fig.show()
運(yùn)行輸出:
如果你對(duì)使用plotly
繪制瀑布圖感興趣,可以訪問鏈接https://plotly.com/python/waterfall-charts/了解更多。
以上就是一文教你如何使用Python繪制瀑布圖的詳細(xì)內(nèi)容,更多關(guān)于Python繪制瀑布圖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python csv實(shí)時(shí)一條一條插入且表頭不重復(fù)問題
這篇文章主要介紹了python csv實(shí)時(shí)一條一條插入且表頭不重復(fù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05基于python腳本實(shí)現(xiàn)軟件的注冊(cè)功能(機(jī)器碼+注冊(cè)碼機(jī)制)
用戶運(yùn)行程序后,通過文件自動(dòng)檢測(cè)認(rèn)證狀態(tài),如果未經(jīng)認(rèn)證,就需要注冊(cè)。這篇文章主要介紹了基于python腳本實(shí)現(xiàn)軟件的注冊(cè)功能(機(jī)器碼+注冊(cè)碼機(jī)制)的相關(guān)資料,需要的朋友可以參考下2016-10-10jupyter?notebook內(nèi)核啟動(dòng)失敗問題及解決方法
這篇文章主要介紹了解決jupyter?notebook內(nèi)核啟動(dòng)失敗問題,本文給大家介紹了問題原因分析及解決方案,圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04Python3 tkinter 實(shí)現(xiàn)文件讀取及保存功能
tkinter是一個(gè)跨平臺(tái)的GUI庫,開發(fā)的程序可以在win,linux或者mac下運(yùn)行,tkinter是python自帶的GUI庫,是對(duì)圖形庫TK的封裝。本文通過實(shí)例代碼給大家介紹Python3 tkinter 實(shí)現(xiàn)文件讀取及保存功能,感興趣的朋友跟隨小編一起看看吧2019-09-09