如何使用Python 繪製驚艷眾人的瀑布圖

来源:https://www.cnblogs.com/123456feng/archive/2022/04/06/16092847.html
-Advertisement-
Play Games

前言 在日常生活中,我們的工作有時候需要對數據進行可視化,讓它一圖標之類的呈現出來。圖給人的感覺是最直觀的,並且能夠一眼就看到數據。 今天我們一起瞭解瀑布圖的重要性,以及如何使用不同的繪圖庫(如 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 一起使用。如果你喜歡這篇文章,順道點個

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天來一個好玩一點的,汽車已經能夠自動駕駛了,Python怎麼能沒有呢?這不,必須安排上。 一、安裝環境 gym是用於開發和比較強化學習演算法的工具包,在python中安裝gym庫和其中子場景都較為簡便。 安裝gym: pip install gym 安裝自動駕駛模塊,這裡使用Edouard Leur ...
  • 使用easyExcel寫出信息到excel文件出現只有表頭沒有數據的現象。 參考來源 https://www.cnblogs.com/jeanfear/p/13409792.html 原因是我javabean上用到了@Data註解,並且裡面的欄位名是類似fUserName這種格式。 我猜測,第二個字 ...
  • 最近女朋友在玩連連看,玩了一個星期了還沒通關,真的是菜。 我實在是看不過去了,直接用python寫了個腳本代碼,一分鐘一把游戲。 快是快,就是聯網玩容易被罵,嘿嘿~ 直接上代碼 模塊導入 import cv2 import numpy as np import win32api import win ...
  • 前言 作為目前全世界最大的視頻網站,它幾乎全是用Python來寫的該網站當前行業內線上視頻服務提供商,該網站的系統每天要處理上千萬個視頻片段,為全球成千上萬的用戶提供高水平的視頻上傳、分發、展示、瀏覽服務。2015年2月,央視首次把春晚推送到該網站。今天,我們就要用Python來快速批量下載該網站的 ...
  • 前言 最近疫情真的是非常嚴重,據“百度疫情實時大數據報告”2022年3月27日19點實時數據顯示,上海較昨日新增確診51例,新增無癥狀2633例,形勢嚴峻。 不少在上海的朋友們也尤為關註其所在地周邊的疫情確診情況,涌現了一些小程式幫助我們通過地圖查看周邊的疫情情況。 而今天的文章,我就來帶大家學習如 ...
  • 一、非同步導出Excel文件 1、設計思想 用戶無需在當前頁面等待導出結果,點擊導出按鈕後服務端即可返回前端提示用戶導出處理中請到下載中心查看結果。 具體業務文件導出實現由後臺非同步處理導出文件到騰訊COS存儲(有效期七天,到期自動刪除)。 用戶統一在下載中心菜單欄頁面中查看導出任務結果並下載文件。 2 ...
  • 假期結束了,準備好開始學習了嗎?今天給大家帶來一道列表的題目,快來看看你會不會解。前幾天有小伙伴問了一個Python列表的問題,這裡拿出來給大家分享下,一起學習下。 題目如下: Python學習交流Q群:903971231### SUMMER OF '69: Return the sum of th ...
  • 作者:小李子說程式 來源:https://www.toutiao.com/i6878184496945070604 前言 軟體開發springboot項目過程中,不可避免的需要處理各種異常,spring mvc 架構中各層會出現大量的try {...} catch {...} finally {.. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...