一文教你如何使用Python繪制瀑布圖
什么是瀑布圖?瀑布圖用表達(dá)兩個(gè)數(shù)值之間的變化過程,過程值為正的時(shí)候,向上加,過程值為負(fù)的時(shí)候向下減[1]。

今天分享在Python中繪制瀑布圖的3種簡單方法(使用不同的庫)!

前期準(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?動(dòng)態(tài)規(guī)劃問題解析(背包問題和最長公共子串)
這篇文章主要介紹了python?動(dòng)態(tài)規(guī)劃(背包問題和最長公共子串),在動(dòng)態(tài)規(guī)劃中,你要將某個(gè)指標(biāo)最大化。在這個(gè)例子中,你要找出兩個(gè)單詞的最長公共子串。fish和fosh都包含的最長子串是什么呢,感興趣的朋友跟隨小編一起看看吧2022-05-05
python爬蟲項(xiàng)目設(shè)置一個(gè)中斷重連的程序的實(shí)現(xiàn)
這篇文章主要介紹了python爬蟲項(xiàng)目設(shè)置一個(gè)中斷重連的程序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
Python?Enum枚舉類的定義及使用場(chǎng)景最佳實(shí)踐
枚舉(Enum)是一種有助于提高代碼可讀性和可維護(hù)性的數(shù)據(jù)類型,允許我們?yōu)橐唤M相關(guān)的常量賦予有意義的名字,在Python中,枚舉類(Enum)提供了一種簡潔而強(qiáng)大的方式來定義和使用枚舉2023-11-11
淺談numpy數(shù)組中冒號(hào)和負(fù)號(hào)的含義
下面小編就為大家分享一篇淺談numpy數(shù)組中冒號(hào)和負(fù)號(hào)的含義,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Python使用whisper實(shí)現(xiàn)語音識(shí)別(ASR)的示例代碼
Whisper是OpenAI的一個(gè)強(qiáng)大的語音識(shí)別庫,支持離線的語音識(shí)別,本文主要介紹了Python使用whisper實(shí)現(xiàn)語音識(shí)別(ASR)的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03

