最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python基于Matplotlib繪制餅圖的詳細(xì)教程

 更新時間:2025年12月16日 09:48:19   作者:永遠(yuǎn)是夏天  
餅圖是數(shù)據(jù)可視化中經(jīng)典的占比類圖表,核心用于展示各分類在整體中的比例關(guān)系,本文基于Matplotlib詳解餅圖的繪制方法,涵蓋基礎(chǔ)繪制、樣式定制、進(jìn)階優(yōu)化等核心知識點(diǎn),結(jié)合實(shí)戰(zhàn)案例讓你快速掌握,需要的朋友可以參考下

引言

餅圖是數(shù)據(jù)可視化中經(jīng)典的占比類圖表,核心用于展示各分類在整體中的比例關(guān)系,尤其適合類別數(shù)量較少(建議不超過8類)的場景。本文基于Matplotlib詳解餅圖的繪制方法,涵蓋基礎(chǔ)繪制、樣式定制、進(jìn)階優(yōu)化等核心知識點(diǎn),結(jié)合實(shí)戰(zhàn)案例讓你快速掌握。

一、基礎(chǔ)餅圖繪制

1. 核心語法與最簡示例

Matplotlib繪制餅圖的核心函數(shù)是plt.pie(),只需傳入“各分類數(shù)值”即可生成基礎(chǔ)餅圖。 示例:展示某電商平臺各品類銷售額占比

import matplotlib.pyplot as plt

# 解決中文顯示問題(通用配置)
plt.rcParams["font.sans-serif"] = ["SimHei"]  # Windows
# plt.rcParams["font.sans-serif"] = ["PingFang SC"]  # macOS
plt.rcParams["axes.unicode_minus"] = False

# 1. 準(zhǔn)備數(shù)據(jù):分類名稱 + 對應(yīng)數(shù)值(數(shù)值會自動計算占比)
categories = ["服飾", "美妝", "食品", "數(shù)碼", "家居"]
sales = [250, 180, 220, 300, 150]

# 2. 創(chuàng)建畫布
plt.figure(figsize=(8, 8))  # 餅圖建議用正方形畫布,避免變形

# 3. 繪制基礎(chǔ)餅圖
plt.pie(sales,  # 核心數(shù)據(jù):各分類數(shù)值
        labels=categories)  # 分類標(biāo)簽

# 4. 顯示圖表
plt.title("某電商平臺各品類銷售額占比", fontsize=14)
plt.show()

2. 核心參數(shù)解析(基礎(chǔ)版)

參數(shù)作用示例
x必選,各分類的數(shù)值(非占比,Matplotlib自動計算)x=[250, 180, 220]
labels分類標(biāo)簽,對應(yīng)x的每個數(shù)值labels=["服飾","美妝","食品"]
autopct顯示各部分占比,支持格式字符串autopct="%1.1f%%"(保留1位小數(shù)的百分比)
colors自定義各扇區(qū)顏色colors=["#FF6B6B","#4ECDC4","#45B7D1"]
startangle餅圖起始角度(默認(rèn)從x軸正方向開始,逆時針繪制)startangle=90(從y軸正方向開始)

優(yōu)化版基礎(chǔ)餅圖(添加占比、自定義顏色):

import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

categories = ["服飾", "美妝", "食品", "數(shù)碼", "家居"]
sales = [250, 180, 220, 300, 150]
# 自定義配色(推薦莫蘭迪/清新色系,避免刺眼)
colors = ["#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4", "#FECA57"]

plt.figure(figsize=(8, 8))
# 繪制餅圖,添加占比和顏色
plt.pie(sales,
        labels=categories,
        autopct="%1.1f%%",  # 顯示占比(1位小數(shù))
        colors=colors,
        startangle=90)  # 起始角度90度

plt.title("某電商平臺各品類銷售額占比", fontsize=14)
plt.axis("equal")  # 強(qiáng)制餅圖為正圓形(關(guān)鍵!避免拉伸變形)
plt.show()

二、進(jìn)階優(yōu)化:突出重點(diǎn)、提升可讀性

1. 突出核心分類(explode參數(shù))

通過explode參數(shù)可將指定扇區(qū)“分離”出來,突出重點(diǎn)類別(如占比最高的“數(shù)碼”品類):

import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

categories = ["服飾", "美妝", "食品", "數(shù)碼", "家居"]
sales = [250, 180, 220, 300, 150]
colors = ["#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4", "#FECA57"]
# explode:對應(yīng)每個扇區(qū)的分離距離,0為不分離,數(shù)值越大分離越遠(yuǎn)
explode = (0, 0, 0, 0.1, 0)  # 僅“數(shù)碼”扇區(qū)分離0.1距離

plt.figure(figsize=(8, 8))
plt.pie(sales,
        labels=categories,
        autopct="%1.1f%%",
        colors=colors,
        startangle=90,
        explode=explode,  # 啟用分離效果
        shadow=True)  # 添加陰影,增強(qiáng)立體感

plt.title("某電商平臺各品類銷售額占比(突出數(shù)碼品類)", fontsize=14)
plt.axis("equal")
plt.show()

2. 優(yōu)化標(biāo)簽樣式(字體、位置)

默認(rèn)標(biāo)簽可能重疊或樣式單一,可通過textprops調(diào)整標(biāo)簽樣式,或手動調(diào)整占比標(biāo)簽位置:

import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

categories = ["服飾", "美妝", "食品", "數(shù)碼", "家居"]
sales = [250, 180, 220, 300, 150]
colors = ["#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4", "#FECA57"]
explode = (0, 0, 0, 0.1, 0)

plt.figure(figsize=(8, 8))
# 繪制餅圖并捕獲文本對象(用于后續(xù)調(diào)整)
patches, texts, autotexts = plt.pie(
    sales,
    labels=categories,
    autopct="%1.1f%%",
    colors=colors,
    startangle=90,
    explode=explode,
    shadow=True,
    textprops={"fontsize": 11}  # 統(tǒng)一設(shè)置標(biāo)簽字體大小
)

# 單獨(dú)調(diào)整占比標(biāo)簽樣式(如顏色、加粗)
for autotext in autotexts:
    autotext.set_color("white")  # 占比文字設(shè)為白色
    autotext.set_fontweight("bold")  # 加粗

plt.title("某電商平臺各品類銷售額占比", fontsize=14)
plt.axis("equal")
plt.show()

3. 處理小占比類別(避免標(biāo)簽重疊)

若部分類別占比過小(如<5%),可將其合并為“其他”類,或通過pctdistance調(diào)整占比標(biāo)簽位置:

import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# 原始數(shù)據(jù):含小占比類別
categories = ["服飾", "美妝", "食品", "數(shù)碼", "家居", "圖書", "配飾"]
sales = [250, 180, 220, 300, 150, 30, 20]

# 合并小占比類別(圖書+配飾=其他)
new_categories = ["服飾", "美妝", "食品", "數(shù)碼", "家居", "其他"]
new_sales = [250, 180, 220, 300, 150, 50]
colors = ["#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4", "#FECA57", "#DDA0DD"]

plt.figure(figsize=(8, 8))
plt.pie(new_sales,
        labels=new_categories,
        autopct="%1.1f%%",
        colors=colors,
        startangle=90,
        pctdistance=0.85)  # 占比標(biāo)簽距離圓心的比例(默認(rèn)0.6,調(diào)大避免重疊)

plt.title("某電商平臺各品類銷售額占比(合并小品類)", fontsize=14)
plt.axis("equal")
plt.show()

三、特殊場景:環(huán)形餅圖(空心餅圖)

環(huán)形餅圖比普通餅圖更美觀,且可在中心添加文字,適合展示多層占比或突出視覺效果。 實(shí)現(xiàn)原理:繪制兩個餅圖,外層為數(shù)據(jù),內(nèi)層為白色填充的“空心”。

import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

categories = ["服飾", "美妝", "食品", "數(shù)碼", "家居"]
sales = [250, 180, 220, 300, 150]
colors = ["#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4", "#FECA57"]

plt.figure(figsize=(8, 8))
# 繪制外層數(shù)據(jù)餅圖
plt.pie(sales,
        labels=categories,
        autopct="%1.1f%%",
        colors=colors,
        startangle=90,
        wedgeprops={"width": 0.3})  # width:環(huán)形寬度(0-1,越小越細(xì))

# 繪制內(nèi)層空心(白色填充)
plt.pie([1], colors="white", radius=0.7)  # radius:內(nèi)層半徑(小于外層)

# 中心添加文字
plt.text(0, 0, "總銷售額\n1100萬", ha="center", va="center", fontsize=12)

plt.title("某電商平臺各品類銷售額占比(環(huán)形圖)", fontsize=14)
plt.axis("equal")
plt.show()

四、餅圖繪制注意事項(xiàng)

  1. 適用場景:僅用于展示“部分-整體”關(guān)系,且類別數(shù)不宜過多(建議≤6類),否則扇區(qū)過小、可讀性差;
  2. 避免誤導(dǎo):餅圖的視覺效果易受起始角度、扇區(qū)順序影響,若需精準(zhǔn)對比占比,優(yōu)先用柱狀圖;
  3. 正圓形保障:務(wù)必添加plt.axis("equal"),否則畫布拉伸會導(dǎo)致餅圖變形為橢圓;
  4. 中文與負(fù)號:始終配置rcParams解決中文亂碼和負(fù)號顯示問題;
  5. 保存高清圖:用plt.savefig("餅圖.png", dpi=300, bbox_inches="tight")替代plt.show(),避免文字截斷。

以上就是Python基于Matplotlib繪制餅圖的詳細(xì)教程的詳細(xì)內(nèi)容,更多關(guān)于Python Matplotlib繪制餅圖的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python版本與supervisor版本的兼容性詳解

    Python版本與supervisor版本的兼容性詳解

    本文介紹了不同Python版本與Supervisor的兼容性,針對Windows環(huán)境提供了特定版本推薦,并強(qiáng)調(diào)了路徑處理、進(jìn)程管理和服務(wù)集成的注意事項(xiàng),同時,還提到了安裝時的依賴要求及驗(yàn)證兼容性的方法
    2026-04-04
  • selenium在scrapy中的使用代碼

    selenium在scrapy中的使用代碼

    本文給大家分享selenium在scrapy中的使用代碼,使用selenium可以很好的幫助我們獲取一些重要數(shù)據(jù)信息,本文通過代碼給大家詳細(xì)介紹,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • Python 多維List創(chuàng)建的問題小結(jié)

    Python 多維List創(chuàng)建的問題小結(jié)

    這篇文章主要介紹了Python 多維List創(chuàng)建的問題小結(jié),詳細(xì)的介紹了遇到的一個小問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 通過實(shí)例解析Python文件操作實(shí)現(xiàn)步驟

    通過實(shí)例解析Python文件操作實(shí)現(xiàn)步驟

    這篇文章主要介紹了通過實(shí)例解析Python文件操作實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • python3顯式變量類型typing的實(shí)現(xiàn)

    python3顯式變量類型typing的實(shí)現(xiàn)

    這篇文章主要介紹了python3顯式變量類型typing的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Python高級編程之消息隊(duì)列(Queue)與進(jìn)程池(Pool)實(shí)例詳解

    Python高級編程之消息隊(duì)列(Queue)與進(jìn)程池(Pool)實(shí)例詳解

    這篇文章主要介紹了Python高級編程之消息隊(duì)列(Queue)與進(jìn)程池(Pool),結(jié)合實(shí)例形式詳細(xì)分析了Python消息隊(duì)列與進(jìn)程池的相關(guān)原理、使用技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2019-11-11
  • Python openpyxl模塊原理及用法解析

    Python openpyxl模塊原理及用法解析

    這篇文章主要介紹了Python openpyxl模塊原理及用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • python實(shí)現(xiàn)求兩個字符串的最長公共子串方法

    python實(shí)現(xiàn)求兩個字符串的最長公共子串方法

    今天小編就為大家分享一篇python實(shí)現(xiàn)求兩個字符串的最長公共子串方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 基于keras中的回調(diào)函數(shù)用法說明

    基于keras中的回調(diào)函數(shù)用法說明

    這篇文章主要介紹了基于keras中的回調(diào)函數(shù)用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Django中使用極驗(yàn)Geetest滑動驗(yàn)證碼過程解析

    Django中使用極驗(yàn)Geetest滑動驗(yàn)證碼過程解析

    這篇文章主要介紹了Django中使用極驗(yàn)Geetest滑動驗(yàn)證碼過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07

最新評論

常山县| 浪卡子县| 绥棱县| 浦江县| 宁城县| 余干县| 榆中县| 通道| 安福县| 嘉祥县| 宜都市| 宣城市| 虹口区| 唐海县| 临澧县| 望城县| 长治市| 江门市| 抚远县| 凤凰县| 即墨市| 吐鲁番市| 岑巩县| 和顺县| 东明县| 天水市| 丘北县| 夏津县| 兴山县| 米易县| 澄城县| 望奎县| 虹口区| 左权县| 邵阳县| 通城县| 山阳县| 四会市| 洞口县| 应城市| 宝应县|