前言 在日常生活中,我們的工作有時候需要對數據進行可視化,讓它一圖標之類的呈現出來。圖給人的感覺是最直觀的,並且能夠一眼就看到數據。 今天我們一起瞭解瀑布圖的重要性,以及如何使用不同的繪圖庫(如 Matplotlib、Plotly)繪製瀑布圖。瀑布圖是一種二維圖表,專門用於瞭解隨著時間或多個步驟或變 ...
前言
在日常生活中,我們的工作有時候需要對數據進行可視化,讓它一圖標之類的呈現出來。圖給人的感覺是最直觀的,並且能夠一眼就看到數據。
今天我們一起瞭解瀑布圖的重要性,以及如何使用不同的繪圖庫(如 Matplotlib、Plotly)繪製瀑布圖。
瀑布圖是一種二維圖表,專門用於瞭解隨著時間或多個步驟或變數的增量正負變化的影響。瀑布圖也稱為浮磚圖、飛磚圖。
瀑布圖
瀑布圖經常用於財務分析,以瞭解多種因素對特定對象的正面和負面影響。該圖表可以顯示基於時間或基於類別的效果。基於類別的圖表表示費用或銷售額的收益或損失或具有順序正值和負值的任何其他變數。基於時間的圖表表示一段時間內的收益或損失。
瀑布圖大多採用水平方式。它們從水平軸開始,由一系列與負面或正面評論相關的浮動列連接。有時,條形圖與圖表中的線條相連。
瀑布圖使用條件
讓我們舉個例子來瞭解何時何地使用瀑布圖,因為製作瀑布圖不是什麼大問題。我們將使用一些虛擬數據和 Kaggle 數據集來構建瀑布圖。
舉個例子
試想下,一個普通的數據表,和一個驚艷的瀑布圖,哪個更方便閱讀?
這張表代表了整個一周的銷售數據,使用 seaborn 庫創建了熱圖*background_gradient
Python學習交流Q群:906715085### 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)
將格式化的表單數據和瀑布圖放在一起查看。
該表按順序顯示了值的重要性,但讀取這些值非常困難。相反,我們可以很容易地看到,按x軸正方向的連貫性順序顯示數據,並且黃色條顯示減量,紅色條顯示增量。
Plotly 繪製瀑布圖
我們將要使用的數據取自Netflix 電影和電視節目的Kaggle數據。
我們將使用一個開源圖表庫 Plotly繪製。
導入庫 import plotly.graph_objects as go 數據集 df = pd.read_csv(r'D:/netflix_titles.csv') 添加年和月並轉換為正確的日期時間格式 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) 準備數據 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) 繪製瀑布圖 現在我們將使用 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"}}, ))
參數設置
go.Waterfall()的每個參數
•x: x軸上的值
•y: y軸上的值
•text: 將要在圖表上顯示的值
•textposition: 我們可以把文本放在圖表的柱狀圖內或柱狀圖上方
為何更加優雅的使用圖表,我們可以為圖表的條形及其連接線設置顏色。紅色表示增加,黃色表示減少。
圖表的參數
•connector: 為連接器線提供顏色
•increasing: 給遞增的條賦予顏色
•decreasing: 給遞減的條上色
其實,上面已經完成了瀑布圖的繪製,但若想他更加驚艷,可以進一步設置圖表。
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參數。
•title: 圖表的標題
•margin: 設置圖表的邊距:上、下、左、右
•plot_bgcolor: 設置繪圖背景顏色
•paper_bgcolor: 設置紙張背景顏色
•font: 設置字體屬性
•title_font: 設置標題字體屬性
這裡,通過使用 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
導入庫 import pandas as pd import waterfall_chart import matplotlib.pyplot as plt %matplotlib inline 繪製瀑布圖 為每周的銷售數據繪製一個瀑布圖。 a = ['mon','tue','wen','thu','fri','sat','sun'] b = [10,-30,-7.5,-25,95,-7,45] waterfall_chart.plot(a, b);
Matplotlib中的瀑布圖
如果仔細查看圖表,預設情況下,具有正值的條形為綠色,負值為紅色,總值為藍色。
向圖表添加一些參數
waterfall_chart.plot(a, b, net_label='Total', rotation_value=360)
圖表參數
•net_label: 在最後一根柱線,我們可以通過 net_label 改變柱線的名稱。
•rotation_value: 旋轉並設置x軸的值。
寫在最後
本文中,我們一起看到了瀑布圖的重要性:何時以及如何將它與 Plotly 和 Matploib 一起使用。如果你喜歡這篇文章,順道點個