📖 知识点
1. 饼图适合什么?
饼图(pie):把一个整体切成几块,每块大小代表该类占整体的比例。最适合看 "占比分布"。
💡 生活比喻饼图像一块 "披萨":按人头分,谁吃得最多、占了几成,一看切片大小就清楚。比例分布用它最直观。
2. 基本饼图
import matplotlib.pyplot as plt
import pandas as pd
# 各菜系销量占比
df = pd.DataFrame({
"菜系": ["川菜", "鲁菜", "粤菜"],
"销量": [140, 90, 50],
})
# 画饼图:用"菜系"做标签、"销量"做占比
df.plot(kind="pie", y="销量", labels=df["菜系"], autopct="%.1f%%", title="各菜系销量占比")
plt.show()
y="销量":用哪一列算占比labels=df["菜系"]:每块的标签(菜系名)autopct="%.1f%%":在每块上显示占比数字(保留 1 位小数)
3. 常用参数
| 参数 | 作用 |
|---|---|
| 每块的标签 |
| 显示占比数字格式 |
| 标题 |
| 图大小 |
⚠️ 易错提醒
饼图只适合看占比,不适合比精确大小(人眼对面积不如对长度准)
类别太多时饼图会很乱,建议类别少(3~6 类)时用
labels要传列表,和y列的长度对应
⚔️ Kata 实战任务
任务需求:
导入 matplotlib 和 pandas
创建一份 "各菜系销量" 数据
用
kind="pie"画饼图,y="销量"、labels设菜系加
autopct显示占比数字显示并打印占比解读
参考代码
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 各菜系销量数据
df = pd.DataFrame({
"菜系": ["川菜", "鲁菜", "粤菜"],
"销量": [140, 90, 50],
})
# 占比圆盘:画饼图
df.plot(kind="pie", y="销量", labels=df["菜系"],
autopct="%.1f%%", title="各菜系销量占比", figsize=(6, 6))
plt.show()
# 打印占比
total = df["销量"].sum()
print(f"✅ 饼图已生成!总销量{total}")
for _, row in df.iterrows():
print(f" {row['菜系']}: {row['销量']}({row['销量']/total*100:.1f}%)")
运行输出(弹出一张饼图 + 终端打印):
✅ 饼图已生成!总销量280
川菜: 140(50.0%)
鲁菜: 90(32.1%)
粤菜: 50(17.9%)
💡 观察:饼图把 280 的销量切成 3 块,川菜占一半 (50%) 最大块,粤菜最小 (17.9%)。占比分布一眼看清。
🧠 思考题
饼图和柱状图都涉及 "多个类别",它们各自最擅长表达什么?什么时候该用饼图?
如果菜系有 8 个,还适合用饼图吗?为什么?
行者孙Python