pin_drop当前位置:知识文库 ❯ 图文

matplotlib饼图pie教程 - 环形图突出显示百分比标注

一、概述

plt.pie()用于绘制饼图,通过扇形面积占比展示各部分与整体的关系。饼图适合展示分类数据的比例分布,当分类数量较少(3-7个)时效果最佳。

matplotlib的pie()支持突出显示、百分比标注、阴影效果等丰富的自定义选项,还可以绘制环形图(甜甜圈图)等变体。

二、基本语法

代码示例

plt.pie(x, labels=None, autopct=None, **kwargs)

x是各扇区的数值数组,matplotlib会自动计算占比。autopct参数可以自动显示百分比。

三、参数说明

参数 类型 默认值 说明
x array_like 必填 各扇区数值
labels list None 各扇区标签
autopct str/function None 百分比格式,如'%1.1f%%'
startangle float 0 起始角度(度)
explode array_like None 各扇区偏移量(突出显示)
colors list None 扇区颜色列表
shadow bool False 是否显示阴影
pctdistance float 0.6 百分比标签距圆心距离
labeldistance float 1.1 标签距圆心距离
wedgeprops dict None 扇区属性(如边框、宽度)

四、代码示例

示例1:基本饼图

绘制编程语言市场份额的基本饼图:

代码示例

import matplotlib.pyplot as plt

# 数据
labels = ['Python', 'Java', 'C++', 'JavaScript', 'Other']
sizes = [35, 25, 15, 20, 5]

# 绘制基本饼图
plt.figure(figsize=(8, 6))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
plt.title('Programming Language Market Share')
plt.savefig('basic_pie.png', dpi=100, bbox_inches='tight')
print("基本饼图已保存")

示例2:突出显示与自定义样式

使用explode突出显示重要扇区,添加阴影和自定义颜色:

代码示例

import matplotlib.pyplot as plt

# 数据
labels = ['Housing', 'Food', 'Transport', 'Entertainment', 'Savings', 'Other']
sizes = [35, 20, 15, 10, 12, 8]
colors = ['#2196F3', '#4CAF50', '#FF9800', '#9C27B0', '#00BCD4', '#FFC107']
explode = (0.05, 0, 0, 0, 0.1, 0)  # 突出住房和储蓄

plt.figure(figsize=(9, 7))
wedges, texts, autotexts = plt.pie(
    sizes,
    labels=labels,
    autopct='%1.1f%%',
    startangle=140,
    colors=colors,
    explode=explode,
    shadow=True,
    pctdistance=0.8,
    wedgeprops={'edgecolor': 'white', 'linewidth': 2}
)

# 设置百分比文本样式
for autotext in autotexts:
    autotext.set_fontsize(10)
    autotext.set_fontweight('bold')

plt.title('Monthly Budget Distribution', fontsize=14, fontweight='bold')
plt.savefig('styled_pie.png', dpi=100, bbox_inches='tight')
print("样式饼图已保存")

示例3:环形图(甜甜圈图)

使用wedgeprops的width参数创建环形图,中心可放置汇总信息:

代码示例

import matplotlib.pyplot as plt

# 数据
labels = ['Direct', 'Organic Search', 'Social Media', 'Referral', 'Email']
sizes = [30, 25, 20, 15, 10]
colors = ['#2196F3', '#4CAF50', '#FF9800', '#9C27B0', '#F44336']

fig, ax = plt.subplots(figsize=(8, 8))

# 环形图:通过wedgeprops设置宽度
wedges, texts, autotexts = ax.pie(
    sizes,
    labels=labels,
    autopct='%1.1f%%',
    colors=colors,
    startangle=90,
    pctdistance=0.82,
    wedgeprops={'width': 0.4, 'edgecolor': 'white', 'linewidth': 2}
)

# 中心文本
ax.text(0, 0, 'Traffic\nSources', ha='center', va='center',
        fontsize=16, fontweight='bold', color='#333333')

ax.set_title('Website Traffic Sources', fontsize=14, fontweight='bold', pad=20)
plt.savefig('donut_pie.png', dpi=100, bbox_inches='tight')
print("环形图已保存")

五、实际应用场景

  • 市场报告:使用饼图展示各品牌市场份额,突出主要竞争者

  • 财务分析:使用饼图展示支出构成比例,帮助识别主要开支项

  • 流量分析:使用环形图展示网站流量来源分布,中心显示总量或关键指标

六、饼图变体对比

类型 特点 实现方式 适用场景
基本饼图 标准扇形 pie() 简单比例展示
突出饼图 部分扇区外移 explode参数 强调某部分
环形图 中空圆环 wedgeprops={'width':0.4} 中心放信息
嵌套饼图 多层环形 两次pie()不同radius 层级数据

七、注意事项

  • 分类数量:饼图分类不宜超过7个,过多分类应合并为"其他"或改用柱状图

  • 转义字符:autopct='%1.1f%%'中的%%是转义字符,输出一个%符号

  • 环形图参数:环形图通过wedgeprops={'width': 0.4}实现,width为环的宽度比例

小贴士:在数据可视化最佳实践中,当需要精确比较数值大小时,柱状图通常比饼图更有效。饼图最适合展示"部分占整体的比例"这概念,而不是精确的数值对比。

八、小结

  • pie()通过扇形面积展示各部分占比,适合3-7个分类

  • autopct参数自动计算并显示百分比

  • explode参数突出显示特定扇区,shadow添加阴影效果

  • 环形图通过wedgeprops={'width': 0.4}实现,中心可放置汇总信息

九、练习题

练习1

绘制一个饼图,展示5种编程语言的使用比例,添加百分比标注和阴影效果。

练习2

绘制一个突出显示最大扇区的饼图,使用自定义颜色列表。

练习3

绘制一个环形图,在中心显示总计数值。

常见问题

饼图和柱状图应该如何选择?

当需要展示"部分占整体的比例"且分类较少(3-7个)时,使用饼图。当需要精确比较数值大小或分类较多时,使用柱状图。柱状图在视觉比较上更准确。

如何让饼图从12点方向开始排列?

使用startangle=90参数。matplotlib默认从3点方向(0度)开始,startangle=90会将起始点旋转到12点方向。可以配合counterclock=True/False控制顺时针或逆时针排列。

如何创建嵌套饼图(多层环形图)?

调用两次pie(),第一次设置较大的radius,第二次设置较小的radius。例如:第一次radius=1.0, width=0.3,第二次radius=0.65, width=0.3。两层使用不同的数据和颜色,实现层级数据的可视化。

饼图中的百分比如何保留一位小数?

使用autopct='%1.1f%%'格式字符串。%1.1f表示浮点数,整数部分不限制宽度,小数部分保留1位。如果需要保留2位小数,使用'%1.2f%%'。注意%%是转义字符,表示输出一个实际的%符号。

标签: 饼图 plt.pie 环形图 比例分布 explode autopct 甜甜圈图

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: matplotlib散点图scatter教程 - 多维数据可视化与颜色映射 下一篇: matplotlib直方图hist()函数详解 - Python数据分布可视化

poll相关推荐