如何使用Python?繪制瀑布圖
前言
在日常生活中,我們的工作有時候需要對數(shù)據(jù)進(jìn)行可視化,讓它一圖標(biāo)之類的呈現(xiàn)出來。圖給人的感覺是最直觀的,并且能夠一眼就看到數(shù)據(jù)。
今天我們一起了解瀑布圖的重要性,以及如何使用不同的繪圖庫(如 Matplotlib、Plotly)繪制瀑布圖。
瀑布圖是一種二維圖表,專門用于了解隨著時間或多個步驟或變量的增量正負(fù)變化的影響。瀑布圖也稱為浮磚圖、飛磚圖。
瀑布圖
瀑布圖經(jīng)常用于財務(wù)分析,以了解多種因素對特定對象的正面和負(fù)面影響。該圖表可以顯示基于時間或基于類別的效果?;陬悇e的圖表表示費(fèi)用或銷售額的收益或損失或具有順序正值和負(fù)值的任何其他變量?;跁r間的圖表表示一段時間內(nèi)的收益或損失。
瀑布圖大多采用水平方式。它們從水平軸開始,由一系列與負(fù)面或正面評論相關(guān)的浮動列連接。有時,條形圖與圖表中的線條相連。
瀑布圖使用條件
讓我們舉個例子來了解何時何地使用瀑布圖,因?yàn)橹谱髌俨紙D不是什么大問題。我們將使用一些虛擬數(shù)據(jù)和 Kaggle 數(shù)據(jù)集來構(gòu)建瀑布圖。
舉個例子
試想下,一個普通的數(shù)據(jù)表,和一個驚艷的瀑布圖,哪個更方便閱讀?
這張表代表了整個一周的銷售數(shù)據(jù),使用 seaborn 庫創(chuàng)建了熱圖*background_gradient
import seaborn as sns*
#data
a = ['mon','tue','wen','thu','fri','sat','sun']
b = [10,-30,-7.5,-25,95,-7,45]
df2 = pd.DataFrame(b,a).reset_index().rename(columns={'index':'values',0:'week'})
#table
cm = sns.light_palette("green", as_cmap=True)
df2.style.background_gradient(cmap=cm)
將格式化的表單數(shù)據(jù)和瀑布圖放在一起查看。

該表按順序顯示了值的重要性,但讀取這些值非常困難。相反,我們可以很容易地看到,按x軸正方向的連貫性順序顯示數(shù)據(jù),并且黃色條顯示減量,紅色條顯示增量。
Plotly 繪制瀑布圖
我們將要使用的數(shù)據(jù)取自Netflix 電影和電視節(jié)目的Kaggle數(shù)據(jù)。
我們將使用一個開源圖表庫 Plotly繪制。
#導(dǎo)入庫
import plotly.graph_objects as go
#數(shù)據(jù)集
df = pd.read_csv(r'D:/netflix_titles.csv')
#添加年和月并轉(zhuǎn)換為正確的日期時間格式
df["date_adding"] = pd.to_datetime(df['date_ added'])
df['year_addition'] = df['date_ added'].dt.year
df['month_ added'] = df['date_addition'].dt.month
df.head(3)
#準(zhǔn)備數(shù)據(jù)
2 = df[df["type"] == "Movie"]
col = "year_added"
vc2 = d2[col].value_counts().reset_index().rename(columns = {col : "count", "index" : col})
vc2['percent'] = vc2['count'].apply(lambda x : 100*x/sum(vc2['count']))
vc2 = vc2.sort_values(col)
#繪制瀑布圖
#現(xiàn)在我們將使用 Plotly trace go.Waterfall() 制作一個瀑布圖。
fig2 = go.Figure(go.Waterfall(
name = "Movie",
orientation = "v",
x = ["2008", "2009", "2010", "2011", "2012",
"2013", "2014", "2015", "2016", "2017",
"2018", "2019", "2020", "2021"],
textposition = "auto",
text = ["1", "2", "1", "13", "3", "6", "14", "48",
"204", "743", "1121", "1366", "1228", "84"],
y = [1, 2, -1, 13, -3, 6, 14, 48, 204, 743, 1121, 1366, -1228, -84],
connector = {"line":{"color":"#b20710"}},
increasing = {"marker":{"color":"#b20710"}},
decreasing = {"marker":{"color":"orange"}},
))
參數(shù)設(shè)置
go.Waterfall()的每個參數(shù):
•x: x軸上的值
•y: y軸上的值
•text: 將要在圖表上顯示的值
•textposition: 我們可以把文本放在圖表的柱狀圖內(nèi)或柱狀圖上方
為何更加優(yōu)雅的使用圖表,我們可以為圖表的條形及其連接線設(shè)置顏色。紅色表示增加,黃色表示減少。
圖表的參數(shù):
•connector: 為連接器線提供顏色
•increasing: 給遞增的條賦予顏色
•decreasing: 給遞減的條上色
其實(shí),上面已經(jīng)完成了瀑布圖的繪制,但若想他更加驚艷,可以進(jìn)一步設(shè)置圖表。
fig2.update_xaxes(showgrid=False)
fig2.update_yaxes(showgrid=False, visible=False)
fig2.update_traces(hovertemplate=None)
fig2.update_layout(title='Watching Movies over the year',
height=350,
margin=dict(t=80, b=20, l=50, r=50),
hovermode="x unified",
xaxis_title=' ',
yaxis_title=" ",
plot_bgcolor='#333',
paper_bgcolor='#333',
title_font=dict(size=25,
color='#8a8d93',
family="Lato, sans-serif"),
font=dict(color='#8a8d93'))
update_layout參數(shù):
•title: 圖表的標(biāo)題
•margin: 設(shè)置圖表的邊距:上、下、左、右
•plot_bgcolor: 設(shè)置繪圖背景顏色
•paper_bgcolor: 設(shè)置紙張背景顏色
•font: 設(shè)置字體屬性
•title_font: 設(shè)置標(biāo)題字體屬性
這里,通過使用 update_yaxes(visible=False) 隱藏了 y 軸。
完整代碼
d2 = df[df["type"] == "Movie"]
col = "year_added"
vc2 = d2[col].value_counts().reset_index().rename(columns = {col : "count", "index" : col})
vc2['percent'] = vc2['count'].apply(lambda x : 100*x/sum(vc2['count']))
vc2 = vc2.sort_values(col)
fig2 = go.Figure(go.Waterfall(
name = "Movie", orientation = "v",
x = ["2008", "2009", "2010", "2011", "2012",
"2013", "2014", "2015", "2016", "2017",
"2018", "2019", "2020", "2021"],
textposition = "auto",
text = ["1", "2", "1", "13", "3", "6", "14", "48",
"204", "743", "1121", "1366", "1228", "84"],
y = [1, 2, -1, 13, -3, 6, 14, 48, 204, 743, 1121, 1366, -1228, -84],
connector = {"line":{"color":"#b20710"}},
increasing = {"marker":{"color":"#b20710"}},
decreasing = {"marker":{"color":"orange"}},
))
fig2.update_xaxes(showgrid=False)
fig2.update_yaxes(showgrid=False, visible=False)
fig2.update_traces(hovertemplate=None)
fig2.update_layout(title='Watching Movies over the year',
height=350,
margin=dict(t=80, b=20, l=50, r=50),
hovermode="x unified",
xaxis_title=' ',
yaxis_title=" ",
plot_bgcolor='#333',
paper_bgcolor='#333',
title_font=dict(size=25, color='#8a8d93',
family="Lato, sans-serif"),
font=dict(color='#8a8d93'))Matplotlib繪制瀑布圖
使用Matplotlib 繪制瀑布圖,需要安裝第三方繪圖庫waterfallcharts,即使用 pip 安裝瀑布圖庫。
pip install waterfallcharts

#導(dǎo)入庫 import pandas as pd import waterfall_chart import matplotlib.pyplot as plt %matplotlib inline #繪制瀑布圖 #為每周的銷售數(shù)據(jù)繪制一個瀑布圖。 a = ['mon','tue','wen','thu','fri','sat','sun'] b = [10,-30,-7.5,-25,95,-7,45] waterfall_chart.plot(a, b);

為Matplotlib中的瀑布圖
如果仔細(xì)查看圖表,默認(rèn)情況下,具有正值的條形為綠色,負(fù)值為紅色,總值為藍(lán)色。
向圖表添加一些參數(shù):
waterfall_chart.plot(a, b,
net_label='Total',
rotation_value=360)圖表參數(shù):
•net_label: 在最后一根柱線,我們可以通過 net_label 改變柱線的名稱。
•rotation_value: 旋轉(zhuǎn)并設(shè)置x軸的值。

總結(jié)
本文中,我們一起看到了瀑布圖的重要性:何時以及如何將它與 Plotly 和 Matploib 一起使用
到此這篇關(guān)于如何使用Python 繪制瀑布圖的文章就介紹到這了,更多相關(guān)Python 繪制瀑布圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python制作機(jī)器人的實(shí)現(xiàn)方法
機(jī)器人自動回復(fù)在很多場景中都可以用的上,本文主要介紹了python制作機(jī)器人的實(shí)現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-06-06
PyQt5每天必學(xué)之創(chuàng)建窗口居中效果
這篇文章主要介紹了PyQt5每天必學(xué)之創(chuàng)建窗口居中效果,使應(yīng)用程序窗口顯示在屏幕的中心,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04
Python基于OpenCV實(shí)現(xiàn)人臉檢測并保存
這篇文章主要介紹了Python基于OpenCV實(shí)現(xiàn)人臉檢測并保存,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07
python 圖像增強(qiáng)算法實(shí)現(xiàn)詳解
這篇文章主要介紹了python 圖像增強(qiáng)算法實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

