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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;…