正确配置字体和autopct格式是绘制中文饼图的关键:需设置plt.rcParams['font.sans-serif']和['axes.unicode_minus'],并使用autopct='%.1f%%'字符串格式。

plt.pie() 画饼图时百分比不显示或格式不对
默认调用 plt.pie() 不会自动显示百分比标签,即使加了 autopct,也常因格式字符串写错或数据类型问题导致报错或显示为 0.0%。常见错误是传入的 autopct 值不是字符串(比如写了 autopct=1.1f% 少了引号),或者用了中文百分号。
-
autopct必须是字符串,例如autopct='%.1f%%'—— 注意两个%:第一个是转义符,第二个才是显示的百分号 - 如果数据含
0或极小值,%.1f%%可能四舍五入成0.0%,可改用'%.2f%%'或判断后过滤掉过小扇区 - 确保输入的
values是数值型(list或np.array),不能是str或含None
中文标签乱码或字体不生效
直接用中文列表当 labels 参数,图表里文字变成方块,是因为 Matplotlib 默认字体不支持中文。这不是 plt.pie() 的锅,而是全局字体配置缺失。
- 在绘图前加两行:
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS', 'DejaVu Sans']和plt.rcParams['axes.unicode_minus'] = False - Windows 推荐用
'SimHei'(黑体),macOS 用'Arial Unicode MS'或'Heiti SC',Linux 可装fonts-wqy-zenhei后配'WenQuanYi Zen Hei' - 不要只改
fontproperties单个参数——它只影响个别文本对象,对pie()内部标签无效
饼图扇区顺序和颜色怎么控制
plt.pie() 默认按输入顺序顺时针排列,起始角从 x 轴正方向开始。很多人想“最大占比在顶部”或“按类别排序”,得手动调整数据顺序和参数。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 用
startangle=90让第一个扇区从 y 轴正向开始(视觉上更像“顶部开始”) - 扇区顺序由
values和labels的索引一一对应决定,想按大小排,就一起用zip排序再解包:sorted_data = sorted(zip(values, labels), reverse=True) -
colors参数必须是长度匹配的颜色列表,支持十六进制('#FF6B6B')、英文名('skyblue')或 RGB 元组;漏写会导致循环复用默认色盘,可能相邻扇区撞色
plt.pie() 和 ax.pie() 混用出图空白或重叠
直接调 plt.pie() 是面向过程式绘图,适合单图;但一旦用了 fig, ax = plt.subplots(),再调 plt.pie() 就会把图画到默认 figure 上,而 ax 空着——看着像没出图,其实是画错地方了。
- 统一风格:要么全用
plt.pie(...),要么全用ax.pie(...) - 用子图时,务必写
ax.pie(values, labels=labels, autopct='%.1f%%'),别漏掉ax. - 如果已有多个子图(如
ax1, ax2 = plt.subplots(1, 2)),每个饼图必须指定对应ax,否则所有plt.pie()都挤在第一个子图里
实际画一个带中文标签、百分比、自定义颜色的饼图,三行核心代码就够了:plt.rcParams['font.sans-serif'] = ['SimHei'],plt.rcParams['axes.unicode_minus'] = False,然后 plt.pie([35, 25, 20, 20], labels=['A类', 'B类', 'C类', 'D类'], autopct='%.1f%%', colors=['#4E79A7', '#F28E2B', '#E15759', '#76B7B2'])。最容易被忽略的是字体配置那两行——不加它们,后面全白忙。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










