【matplotlib 實戰】--堆疊面積圖

来源:https://www.cnblogs.com/wang_yb/archive/2023/10/01/17738790.html
-Advertisement-
Play Games

堆疊面積圖和麵積圖都是用於展示數據隨時間變化趨勢的統計圖表,但它們的特點有所不同。面積圖的特點在於它能夠直觀地展示數量之間的關係,而且不需要標註數據點,可以輕鬆地觀察數據的變化趨勢。而堆疊面積圖則更適合展示多個數據系列之間的變化趨勢,它們一層層的堆疊起來,每個數據系列的起始點是上一個數據系列的結束點 ...


堆疊面積圖和麵積圖都是用於展示數據隨時間變化趨勢的統計圖表,但它們的特點有所不同。
面積圖的特點在於它能夠直觀地展示數量之間的關係,而且不需要標註數據點,可以輕鬆地觀察數據的變化趨勢。而堆疊面積圖則更適合展示多個數據系列之間的變化趨勢,它們一層層的堆疊起來,每個數據系列的起始點是上一個數據系列的結束點,多數據列的展示更加直觀和易於理解。

堆疊面積圖觀察幾個數據系列隨時間的變化情況時,既能看到各數據系列的走勢,又能看到整體的規模,
但是,過多的系列,也會導致難以分辨。
此外,堆疊面積圖展示的數據一般會有時間上的關聯,當數據沒有時間上的關聯時,建議適用堆疊柱狀圖。

1. 主要元素

堆疊面積圖是一種用於展示數據分類、分組和數據關聯性的圖表,主要由以下幾個元素組成:

  1. 堆疊面積:表示數據的分佈或密度
  2. 圖例:圖例用於說明堆疊圖的繪製規則和參數
  3. X軸:一般是有序變數,表示數據點的變化區間
  4. Y軸:數據點在不同時刻的值

image.png

2. 適用的場景

堆疊面積圖適用於以下分析場景:

  • 類別占比比較:堆疊面積圖可以用來比較不同類別在總體中的占比關係。例如,你可以使用堆疊面積圖來展示銷售額按產品類別的分佈情況,以顯示每個類別對總銷售額的貢獻。
  • 趨勢展示:堆疊面積圖可以在一個圖表中同時顯示多個類別或組的趨勢。它可以用來展示每個類別在不同時間點或區域的變化情況,並幫助分析人員觀察和理解各類別之間的差異和趨勢。
  • 堆疊級別比較:堆疊面積圖還可以用來比較不同級別的數據在總體中的占比關係。例如,你可以使用堆疊面積圖來展示各部門在總體支出中的比例,以顯示各個部門的相對貢獻。
  • 累積效果展示:堆疊面積圖可以展示隨著時間、地區或其他維度的推移,各組別所積累的整體效果。這對於觀察累積效果的變化和趨勢非常有幫助。

3. 不適用的場景

堆疊面積圖不適用於以下分析場景:

  • 數據重疊:如果數據中有重疊的部分,堆疊面積圖會使數據難以解讀和比較。當數據的堆疊部分變得模糊或不清晰時,堆疊面積圖可能就無法有效地傳達信息。
  • 數據量變動:如果每個類別或組的數據量差別很大,堆疊面積圖可能會導致視覺上的需求不平衡。數據量較大的類別或組可能會過於突出,而數據量較小的類別或組則可能被掩蓋。
  • 無法顯示趨勢:堆疊面積圖在展示數據的總體趨勢上相對有效,但卻不適用於顯示每個類別或組內部的趨勢。如果你希望關註每個類別或組的個別趨勢,那麼使用其他圖表類型如折線圖可能更為合適。
  • 存在負值數據:堆疊面積圖假設數據都是正值,不適合用於展示包含負值的數據。這是因為堆疊面積圖的堆疊效果會導致負值的表現相對模糊,難以準確表達。

4. 分析實戰

這次使用三大產業的增加值來實戰堆疊面積圖的分析。

4.1. 數據來源

數據來源國家統計局公開數據,已經整理好的csv文件在:https://databook.top/nation/A02

本次分析使用其中的 A0201.csv 文件(國內生產總值數據)。

下麵的文件路徑 fp 要換成自己實際的文件路徑。

fp = "d:/share/A0201.csv"

df = pd.read_csv(fp)
df

image.png

4.2. 數據清理

過濾出三大產業的數據:

key1 = "第一產業增加值(億元)"
key2 = "第二產業增加值(億元)"
key3 = "第三產業增加值(億元)"

df = df[(df["zbCN"] == key1)
        | (df["zbCN"] == key2)
        | (df["zbCN"] == key3)]
df

image.png

4.3. 分析結果可視化

繪製三大產業的堆疊面積圖:

from matplotlib.ticker import MultipleLocator

key1 = "第一產業增加值(億元)"
key2 = "第二產業增加值(億元)"
key3 = "第三產業增加值(億元)"

val1 = df[(df["zbCN"] == key1)].sort_values("sj")
val2 = df[(df["zbCN"] == key2)].sort_values("sj")
val3 = df[(df["zbCN"] == key3)].sort_values("sj")

with plt.style.context("seaborn-v0_8"):
    fig = plt.figure()
    ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
    ax.xaxis.set_major_locator(MultipleLocator(4))
    ax.xaxis.set_minor_locator(MultipleLocator(2))

    ax.stackplot(
        val1["sjCN"],
        [val1["value"], val2["value"], val3["value"]],
        labels=[key1, key2, key3],
        alpha=0.8,
    )

    ax.legend(loc="upper left")

image.png

各個數據集在堆疊面積圖中不會重合,
所以不僅可以看出各個產業的增長情況,還能看出整體的增長主要來自哪個產業的影響。

從分析結果可以看出,我國的經濟增長主要來自於第二,第三產業的增長。
這個結果和之前的文章中關於人口的分析也是相吻合的,在那個文章中,我們發現農業人口大量減少,城鎮人口大量增加。


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

-Advertisement-
Play Games
更多相關文章
  • 前面幾天的學習,我們瞭解了Dart語言的特性(基礎語法概覽、迭代集合、非同步編程和Mixin高級特性)。今天我們深入學習Dart的變數,包括:空安全(Null safety)、變數預設值、延遲變數(late)、final變數和const常量…… ...
  • Java 21引入了兩個語言核心功能: 未命名的Java類你說 新的啟動協議:該協議允許更簡單地運行Java類,並且無需太多樣板 下麵一起來看個例子。通常,我們初學Java的時候,都會寫類似下麵這樣的 Hello World 程式: public class HelloWorld { public ...
  • 【中秋國慶不斷更】HarmonyOS對通知類消息的管理與發佈通知(上) 一、 通知概述 通知簡介 應用可以通過通知介面發送通知消息,終端用戶可以通過通知欄查看通知內容,也可以點擊通知來打開應用。 通知常見的使用場景: ​ ● 顯示接收到的短消息、即時消息等。 ​ ● 顯示應用的推送消息,如廣告、版本 ...
  • WebSocket是一種在單個TCP連接上進行全雙工通信的協議。WebSocket使得客戶端和伺服器之間的數據交換變得更加簡單,允許服務端主動向客戶端推送數據。在WebSocket API中,瀏覽器和伺服器只需要完成一次握手,兩者之間就直接可以創建持久性的連接,併進行雙向數據傳輸。 ...
  • @Styles和@Extend僅僅應用於靜態頁面的樣式復用,stateStyles可以依據組件的內部狀態的不同,快速設置不同樣式。這就是我們本章要介紹的內容stateStyles(又稱為:多態樣式)。 概述 stateStyles是屬性方法,可以根據UI內部狀態來設置樣式,類似於css偽類,但語法不 ...
  • Sentinel 簡介 Sentinel 是阿裡中間件團隊開源的,面向分散式服務架構的高可用流量防護組件,主要以流量為切入點,從限流、流量整形、熔斷降級、系統負載保護、熱點防護等多個維度來幫助開發者保障微服務的穩定性 Sentinel 提供了兩個服務組件: Sentinel 用來實現微服務系統中服務 ...
  • 開心一刻 昨晚,老婆輔導女兒寫作業 有一道形容媽媽的題,女兒寫下了:我媽媽像一個暴躁的老虎 老婆拿起題冊輕輕敲了下女兒,生氣到:有這麼形容你媽的嗎 女兒:你看你現在 老婆:我有那麼暴躁嗎,你就不能說我媽媽像一個公主,溫柔大方漂亮? 女兒:題目讓我造句,沒讓我造謠! 我:哈哈哈哈! 郵件發送 基於 J ...
  • 在Go語言中,結構體是核心的數據組織工具,提供了靈活的手段來處理複雜數據。本文深入探討了結構體的定義、類型、字面量表示和使用方法,旨在為讀者呈現Go結構體的全面視角。通過結構體,開發者可以實現更加模塊化、高效的代碼設計。這篇文章旨在為您提供關於結構體的深入理解,助您更好地利用Go語言的強大功能。 關 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...