Python 饼图入门:3 行代码展示数据占比

饼图的核心作用是直观呈现各部分数据占总体的比例关系 (比如不同产品的市场份额、家庭开支构成、班级成绩等级分布等),通过扇形的大小对比,能快速看出 "谁占比最高""谁占比最低"。借助matplotlib库,新手也能轻松用 Python 画出清晰的饼图。

一、准备工作:安装并导入库

和之前的柱状图、折线图、散点图一致,核心依赖matplotlib库,若未安装,打开终端 / 命令提示符输入:

bash 复制代码
pip install matplotlib

安装完成后,在代码中导入库(惯例简写为plt):

python 复制代码
import matplotlib.pyplot as plt

二、最基础的饼图:3 行核心代码

我们以 "某家庭 monthly 开支构成" 为例,手把手实现第一个饼图。

步骤 1:准备数据

定义两个列表,对应 "分类数据"(比如开支项目)和 "对应占比 / 数值"(比如开支金额,饼图会自动计算占比):

python 复制代码
# 分类数据(饼图的各部分名称)
expenses = ["房租", "餐饮", "交通", "娱乐", "其他"]
# 对应数值(可直接用金额,饼图自动计算占比)
amounts = [3500, 2000, 800, 1200, 500]

步骤 2:绘制饼图

plt.pie()函数绘制,核心参数是数值数据分类标签

python 复制代码
# 绘制饼图(核心代码)
plt.pie(amounts, labels=expenses)

步骤 3:显示图表

plt.show()展示绘制结果:

python 复制代码
# 显示图表
plt.show()

完整代码(直接运行可用)

python 复制代码
import matplotlib.pyplot as plt

# 1. 准备数据
expenses = ["房租", "餐饮", "交通", "娱乐", "其他"]  # 分类标签
amounts = [3500, 2000, 800, 1200, 500]  # 对应数值(金额/数量)

# 2. 绘制饼图
plt.pie(amounts, labels=expenses)

# 3. 显示图表
plt.show()

三、简单优化:让占比更清晰

基础饼图可以添加 "占比百分比""颜色区分""突出某部分",让图表更专业,补充 3 行代码即可:

Python 复制代码
import matplotlib.pyplot as plt

expenses = ["房租", "餐饮", "交通", "娱乐", "其他"]
amounts = [3500, 2000, 800, 1200, 500]

# 定义颜色列表(可选,让各部分更易区分)
colors = ["#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4", "#FECA57"]
# 突出某部分(比如突出占比最高的房租,explode参数控制偏移距离)
explode = (0.1, 0, 0, 0, 0)

# 绘制饼图:添加百分比、颜色、突出效果、文本格式
plt.pie(
    amounts,
    labels=expenses,
    colors=colors,
    explode=explode,
    autopct="%1.1f%%",  # 显示占比百分比(保留1位小数)
    startangle=90  # 饼图起始角度(90度=从正上方开始)
)
plt.title("某家庭月度开支构成图")  # 图表标题
plt.axis("equal")  # 保证饼图是正圆形(避免默认椭圆)

plt.show()

四、关键函数说明(新手必记)

函数 作用 常用参数
plt.pie(x) 绘制饼图(核心) x = 数值数据;labels = 分类标签;colors = 颜色列表;explode = 突出效果(元组,对应每个部分的偏移量);autopct = 百分比格式(如 "%1.1f%%"= 保留 1 位小数);startangle = 起始角度
plt.title() 设置图表标题 字符串(如 "月度开支构成")
plt.axis("equal") 保证饼图为正圆形 固定参数 "equal",必加(否则可能是椭圆)
plt.show() 显示图表

五、常见应用场景

饼图的核心是 "展示占比",适合这些场景:

  1. 构成分析:公司营收构成、产品市场份额、班级学生性别比例
  2. 资源分配:项目预算分配、时间利用占比、库存品类占比
  3. 层级展示:某指标下各子类别占总体的比例(比如总销售额中各区域的占比)
  4. 注意:分类不宜过多(建议不超过 6 类),否则扇形太小,可读性变差
相关推荐
狗狗学不会8 分钟前
RK3588 极致性能:使用 Pybind11 封装 MPP 实现 Python 端 8 路视频硬件解码
人工智能·python·音视频
sheji341616 分钟前
【开题答辩全过程】以 基于spring boot的停车管理系统为例,包含答辩的问题和答案
java·spring boot·后端
love530love19 分钟前
EPGF 新手教程 21把“环境折磨”从课堂中彻底移除:EPGF 如何重构 AI / Python 教学环境?
人工智能·windows·python·重构·架构·epgf
ldccorpora20 分钟前
Chinese News Translation Text Part 1数据集介绍,官网编号LDC2005T06
数据结构·人工智能·python·算法·语音识别
大学生毕业题目20 分钟前
毕业项目推荐:99-基于yolov8/yolov5/yolo11的肾结石检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·目标检测·cnn·pyqt·肾结石检测
源代码•宸21 分钟前
Leetcode—1266. 访问所有点的最小时间【简单】
开发语言·后端·算法·leetcode·职场和发展·golang
寄思~22 分钟前
Excel 数据匹配工具 -笔记
笔记·python·学习·excel
中年程序员一枚1 小时前
多数据源的springboot进行动态连接方案
java·spring boot·后端
w***76551 小时前
SpringBoot集成MQTT客户端
java·spring boot·后端
其美杰布-富贵-李1 小时前
PyTorch Lightning
人工智能·pytorch·python·training