Matplotlib 可視化大師系列(五):plt.pie() - 展示組成部分的餅圖

目錄

      • Matplotlib 可視化大師系列博客總覽
  • Matplotlib 可視化大師系列(五):plt.pie() - 展示組成部分的餅圖
    • 一、 餅圖是什么?何時使用(何時避免)?
    • 二、 函數原型與核心參數
    • 三、 從入門到精通:代碼示例
      • 示例 1:基礎餅圖
      • 示例 2:環形圖與自定義
      • 示例 3:自定義格式化與高級樣式
    • 四、 最佳實踐與常見陷阱
    • 五、 總結

Matplotlib 可視化大師系列博客總覽

本系列旨在提供一份系統、全面、深入的 Matplotlib 學習指南。以下是博客列表:

  1. 基礎篇plt.plot() - 繪制折線圖的利刃
  2. 分布篇plt.scatter() - 探索變量關系的散點圖
  3. 比較篇plt.bar()plt.barh() - 清晰對比的柱狀圖
  4. 統計篇plt.hist()plt.boxplot() - 洞察數據分布
  5. 占比篇plt.pie() - 展示組成部分的餅圖
  6. 高級篇plt.imshow() - 繪制矩陣與圖像的強大工具
  7. 專屬篇: 繪制誤差線 (plt.errorbar())、等高線 (plt.contour()) 等特殊圖表
  8. 綜合篇: 在一張圖中組合多種圖表類型

Matplotlib 可視化大師系列(五):plt.pie() - 展示組成部分的餅圖

餅圖是一種經典的圖表類型,用于顯示一個整體中各個組成部分的比例或百分比關系。雖然近年來餅圖的使用受到一些爭議(尤其在數據可視化專家中),但在恰當的場景下,它仍然是一種直觀有效的工具。Matplotlib 通過 plt.pie() 函數提供了創建餅圖的功能。

一、 餅圖是什么?何時使用(何時避免)?

餅圖是一個圓形圖表,被分割成多個扇形區域,每個扇形的弧長(以及面積)代表其部分占總體的比例。所有扇形的比例加起來是100%。

適用場景(謹慎使用!)

  • 顯示2-5個組成部分占整體的百分比。
  • 當需要強調一個部分與整體的關系時(例如,市場份額超過50%)。
  • 組成部分的百分比差異足夠大,以便在視覺上區分。

避免使用的情況

  • 太多(>6個) 類別。小的扇形難以比較和標注。
  • 當類別比例非常接近時(例如,28%, 29%, 30%),人眼很難分辨扇形大小。
  • 當需要精確比較不同部分的大小時(條形圖通常更擅長比較)。
  • 當數據不構成一個完整的"整體"時。

二、 函數原型與核心參數

plt.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, **kwargs)

核心參數詳解

  1. 數據與標簽:
    • x: 一維數組,每個元素代表一個扇形的大小(比例會自動計算)。
    • labels: 一個字符串序列,為每個扇形指定標簽。
    • colors: 一個顏色序列,用于指定每個扇形的顏色。
  2. 百分比與格式:
    • autopct: 非常有用的參數,用于在扇形內顯示百分比。
      • None(默認): 不顯示。
      • '%1.1f%%': 顯示一位小數的百分比(如 ‘15.2%’)。
      • '%1.0f%%': 顯示整數百分比。
      • 函數: 可以自定義一個函數來格式化顯示內容。
    • pctdistance: 百分比文本離圓心的距離比例(默認0.6)。
    • labeldistance: 標簽文本離圓心的距離比例(默認1.1)。
  3. 外觀與布局:
    • explode: 一個長度與 x 相同的數組,指定每個扇形偏離圓心的距離。例如 [0, 0.1, 0, 0] 會讓第二個扇形突出顯示。
    • startangle: 起始繪制角度(度),從正東方向(3點鐘方向) 開始逆時針旋轉。默認0。
    • shadow: 如果 True,為餅圖添加陰影效果(通常不推薦,顯得過時)。
    • wedgeprops: 一個字典,用于設置扇形屬性,如邊緣顏色(edgecolor)、線寬(linewidth)等。推薦使用 wedgeprops={'edgecolor': 'black', 'linewidth': 1} 來為扇形添加黑色邊框,提高可讀性。
    • textprops: 一個字典,用于設置標簽和百分比文本的屬性,如字體大小(fontsize)、顏色(color)等。
  4. 尺寸與位置:
    • radius: 餅圖的半徑,用于控制大小。
    • center: 餅圖的中心點坐標。
    • frame: 如果 True,在餅圖周圍繪制坐標軸框架(幾乎從不使用)。

三、 從入門到精通:代碼示例

示例 1:基礎餅圖

import matplotlib.pyplot as plt# 數據
sizes = [15, 30, 25, 10, 20] # 這些值會自動計算百分比
labels = ['Python', 'JavaScript', 'Java', 'C++', 'Others']
colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue', 'plum']
explode = (0, 0.1, 0, 0, 0)  # 只"突出"第二部分 'JavaScript'fig, ax = plt.subplots(figsize=(8, 8))# 繪制餅圖
wedges, texts, autotexts = ax.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.1f%%',shadow=False, # 避免使用陰影startangle=90, # 從90度(正北)開始wedgeprops={'edgecolor': 'black', 'linewidth': 1} # 添加邊框)# 美化百分比文本
for autotext in autotexts:autotext.set_color('black')autotext.set_fontsize(10)autotext.set_weight('bold')ax.set_title('Popular Programming Languages', fontsize=14)
# 確保餅圖是正圓形
ax.axis('equal')plt.tight_layout()
plt.show()

示例 2:環形圖與自定義

環形圖(Donut Chart)是餅圖的一種變體,中間有一個空洞,通常用于顯示多個系列或使視覺效果更輕盈。

# 數據
sizes = [15, 30, 25, 10, 20]
labels = ['Python', 'JavaScript', 'Java', 'C++', 'Others']
colors = ['#ff9999','#66b3ff','#99ff99','#ffcc99','#ff99cc']fig, ax = plt.subplots(figsize=(8, 8))# 先畫一個普通的餅圖
wedges, texts, autotexts = ax.pie(sizes,labels=labels,colors=colors,autopct='%1.1f%%',startangle=90,pctdistance=0.85, # 百分比放遠一點wedgeprops=dict(width=0.4, edgecolor='w') # 關鍵:width設置環的寬度)# 在中心畫一個白色的圓,使其看起來像環形圖
centre_circle = plt.Circle((0,0), 0.70, fc='white')
ax.add_artist(centre_circle)# 另一種添加中心文本的方法
ax.text(0, 0, 'Languages', ha='center', va='center', fontsize=16, fontweight='bold')ax.axis('equal')
plt.title('Donut Chart Example', fontsize=14)
plt.tight_layout()
plt.show()

示例 3:自定義格式化與高級樣式

from matplotlib import cm
import numpy as np# 數據
data = [35, 25, 20, 15, 5]
categories = ['Electronics', 'Clothing', 'Food', 'Books', 'Other']# 創建一個顏色映射
colors = cm.Set3(np.linspace(0, 1, len(data)))fig, ax = plt.subplots(figsize=(9, 9))# 自定義百分比顯示函數
def make_autopct(values):def my_autopct(pct):total = sum(values)val = int(round(pct*total/100.0))# 同時顯示百分比和實際值return '{p:.1f}%\n({v:d})'.format(p=pct, v=val)return my_autopctwedges, texts, autotexts = ax.pie(data,labels=categories,colors=colors,autopct=make_autopct(data), # 使用自定義函數startangle=140,shadow=False,wedgeprops={'linewidth': 2, 'edgecolor': 'white', 'alpha': 0.9})# 美化文本
for text in texts:text.set_fontsize(11)text.set_fontweight('bold')
for autotext in autotexts:autotext.set_fontsize(9)autotext.set_color('darkblue')plt.title('Sales Distribution by Category', fontsize=16, fontweight='bold')
ax.axis('equal')plt.tight_layout()
plt.show()

四、 最佳實踐與常見陷阱

  1. 最佳實踐:
    • 排序數據: 將數據從大到小排序,通常從12點鐘方向開始,使圖表更易于閱讀。
    • 限制類別數量: 堅持使用2-5個主要類別。將小的、不重要的類別合并為"其他"。
    • 直接標注: 使用 autopctplt.text() 直接在扇形上標注百分比/數值,避免讓讀者依賴圖例。
    • 使用顏色: 使用區分度高的顏色,但確保顏色不會傳達錯誤的順序信息(餅圖各部分本質上是無序的)。
    • 考慮條形圖: 在決定使用餅圖之前,先問自己一個水平的條形圖是否更能清晰地進行比較。
  2. 常見陷阱:
    • 3D 餅圖絕對避免使用3D餅圖。它嚴重扭曲了扇形的感知大小。
    • 過多切片: 包含太多類別是餅圖最常見的問題,會導致"餅圖垃圾"。
    • 缺少標注: 不提供百分比或數值,迫使讀者猜測比例。
    • 誤導性整體: 確保所有部分加起來代表一個有意義的整體(100%)。

五、 總結

plt.pie() 是一個專門用于創建比例圖表的工具。

  • 核心功能: 用扇形角度表示部分與整體的比例關系。
  • 關鍵參數x(數據), labels, autopct(百分比), explode(突出), startangle, wedgeprops(樣式)。
  • 高級應用: 環形圖(通過 wedgeprops={'width': x})、自定義格式化函數。
  • 使用哲學謹慎使用。餅圖在特定簡單場景下有效,但在大多數需要精確比較的情況下,條形圖是更優的選擇

掌握餅圖意味著你知道何時以及如何有效地使用它,更重要的是,知道何時應該避免使用它。在下一篇文章中,我們將探索一個更高級、更強大的函數 plt.imshow(),用于可視化矩陣數據和圖像。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/96840.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/96840.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/96840.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ Core Guidelines 核心理念

引言 C 是一門功能強大但復雜性極高的編程語言。為了幫助開發者更高效、安全地使用現代 C,C 核心指南(CppCoreGuidelines)應運而生。這份由 C 之父 Bjarne Stroustrup 等人主導的指南,提供了大量關于 C 編碼的規則、最佳實踐和設…

vue3 - 組件間的傳值

組件間傳參 父傳子v-on/props 父組件使用v-on:綁定要傳的參數:parentData"parentData"&#xff1a; <template><div><Child1 :parentData"parentData"></Child1></div> </template> <script setup lang"ts…

Kafka 在 6 大典型用例的落地實踐架構、參數與避坑清單

一、選型速查表場景關鍵目標推薦清單&#xff08;示例&#xff09;消息&#xff08;Messaging&#xff09;解耦、低延遲、可靠投遞acksall、enable.idempotencetrue、retries>0、min.insync.replicas2、合理分區鍵、DLT網站活動追蹤吞吐極高、可回放主題按類型拆分&#xff…

Node.js(1)—— Node.js介紹與入門

前面我們談到一些前端開發的內容&#xff0c;學習了HTML、css和JavaScript&#xff0c;已經掌握了如何編寫一些簡單功能的網頁。但是只屬于前端部分&#xff0c;我們只能在本地打開文件進行瀏覽&#xff0c;不能讓其他人打開我們編寫的網站&#xff1b;這時就需要后端部分上場了…

Python辦公——爬蟲百度翻譯網頁版(自制翻譯小工具——進階更新版)

目錄 專欄導讀 前言 項目概述 功能特點 技術棧 核心架構設計 類結構設計 界面布局設計 核心功能實現 1. 智能語言檢測 2. 異步翻譯處理 3. HTTP請求處理 4. 結果解析與顯示 界面設計亮點 1. 響應式布局 2. 用戶體驗優化 3. 現代化組件 技術難點與解決方案 1. 跨線程UI更新 2. U…

CentOS7 + Docker 部署 Dify 超詳細圖文教程

如今Agent在互聯網上大行其道&#xff0c;網上吵得火熱&#xff0c;各個企業也都想搭建自己的Agent。COZE的開源還有最近新出的JoyAgent也都讓大家躍躍欲試&#xff0c;今天為大家帶來的是Dify的部署方式&#xff0c;相比其他工作流平臺&#xff0c;Dify對于整個Agent制作的流程…

vscode(MSVC)進行c++開發的時,在debug時查看一個eigen數組內部的數值

vscode進行c開發的時&#xff0c;在debug時查看一個eigen數組內部的數值問題描述解決方案拓展其他可視化使用visual studio時的可視化使用別的編譯器的可視化問題描述 使用vscode進行c開發&#xff0c;編譯器是MSVC&#xff0c;在debug的時候想查看一個eigen數組的數值&#x…

【51單片機】【protues仿真】基于51單片機八路搶答器數碼管系統

目錄 一、主要功能 二、使用步驟 三、硬件資源 四、軟件設計 五、實驗現象 一、主要功能 1、數碼管顯示 2、主持人按下開始&#xff0c;8位選手開始搶答 3、第一次使用要設置搶答時間&#xff0c;支持掉電存儲 4、選手搶答成功&#xff0c;數碼管會顯示其號碼 5、按下主…

深度學習:CUDA、PyTorch下載安裝

目錄 一、安裝準備 二、安裝CUDA 2.1 查看本機支持的 CUDA 版本及相關信息 2.2 卸載CUDA(可選) 2.3 下載cuda安裝包 2.4 安裝 2.5 配置環境變量 三、安裝PyTorch 3.1 版本選擇 3.2 下載安裝 方法一&#xff1a;直接安裝&#xff08;不建議&#xff0c;網差的話會死機…

MyBatis-Plus 快速入門 -常用注解

目錄 1. 常用注解 TableName TableId TableField 2. IdType 枚舉 3. 使用 TableField 的常見場景 4. 完整示例 5. 總結 在使用 MyBatis-Plus 的過程中&#xff0c;我們經常會用到一些注解來完成實體類與數據庫表字段之間的映射關系。本文將帶你快速入門&#xff0c;了解…

2025-08-23Excel 條件高亮工具,秒高亮顯示符合篩選條件的行數據

Excel 條件高亮工具&#xff0c;秒高亮顯示符合篩選條件的行數據 先看圖【加班終結者】Excel 條件高亮工具&#xff08;試用版&#xff09; ——讓錯誤數據一秒現形&#xff0c;免費先爽 30 次&#xff01; 你是不是也這樣&#xff1f; ? 財務對賬&#xff0c;1000 行工資表里…

vue 一鍵打包上傳

npm run build之后&#xff0c;將dist文件夾自動壓縮&#xff0c;通過ssh自動連接服務器&#xff0c;把壓縮包放到指定目錄下&#xff0c;然后自動解壓根目錄創建gulpfile.js文件const gulp require(gulp); const GulpSSH require(gulp-ssh); const archiver require(archiv…

【Qt調試】無法查看QString內容

環境Qt版本&#xff1a;6.9.1問題Qt creator進入斷點&#xff0c;Expressions不能查看變量&#xff08;類型&#xff1a;QString&#xff09;的內容。解決方法選擇變量右鍵&#xff0c;勾選【Use Debugging Helpers】

防爆自動氣象監測設備:高危環境的 “安全堡壘”

防爆自動氣象監測設備&#xff1a;高危環境的 “安全堡壘” 柏峰【BF-FB】在化工園區、油氣田、礦山等高危行業領域&#xff0c;絲毫馬虎不得。而氣象條件&#xff0c;這個看似平常的因素&#xff0c;實則在安全生產中扮演著舉足輕重的角色。防爆自動氣象監測設備的出現&#x…

《C++進階:引用補充、內聯函數與nullptr 核心用法》

&#x1f618;個人主頁&#xff1a;Cx330? &#x1f440;個人簡介&#xff1a;一個正在努力奮斗逆天改命的二本覺悟生 &#x1f4d6;個人專欄&#xff1a;《C語言》《LeetCode刷題集》《數據結構-初階》《C知識分享》 &#x1f31f;人生格言&#xff1a;心向往之行必能至 前言…

通過python程序將實時監測數據寫入excel軟件進行保存是常用和非常實用的功能,本文教會大家怎么去搞定此功能

目錄 一、功能介紹 二、具體的程序示例 三、實際應用建議 一、功能介紹 本方案的核心功能是持續監聽一個數據源&#xff08;如傳感器、API接口、消息隊列、其他應用程序等&#xff09;&#xff0c;將獲取到的實時數據流以追加的方式寫入到Excel文件中。同時&#xff0c;方案…

在 Linux 中全局搜索 Word 文檔內容的完整指南

文章目錄 為什么不能直接使用 grep 搜索 Word 文檔? 解決方案:使用 Pandoc 轉換后搜索 步驟 1:安裝 Pandoc 步驟 2:創建搜索腳本 步驟 3:執行搜索(兩者選其一) 一行命令解決方案 高級用法與優化 1. 忽略大小寫搜索 2. 顯示匹配內容 3. 性能優化 注意事項 結論 在日常工作中…

基于STM32單片機智能農業大棚控制系統-插件款 DIY 設計開源(實物+程序+原理圖+其他資料)

目錄 一、項目成品展示 二、功能介紹 三、硬件組成 四、PCB展示 五、程序設計 六、資料分享 資料獲取 查看主頁介紹&#xff1a;兆龍電子單片機設計 一、項目成品展示 項目成品圖片展示&#xff1a; 嗶哩嗶哩視頻鏈接&#xff1a; STM32單片機智能農業大棚控制系統-插件…

如何實現二維CAD與3D建模工程圖關聯一體化出圖 | 中望3D 2026新亮點

本文為CAD芯智庫整理&#xff0c;未經允許請勿復制、轉載&#xff01;原文轉自&#xff1a;www.xwzsoft.com/h-nd-609.htmlwww.xwzsoft.com/h-nd-609.html許多企業在同時使用二三維CAD軟件時&#xff0c;往往因為2D和3D是不同軟件商開發&#xff0c;很容易遇到問題&#xff1a;…