You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib绘制双饼图:解决文本重叠及添加子图标题问题

解决饼图文本重叠及添加独立标注问题

问题背景

想要在同一画布中并排绘制两个饼图,但右侧饼图的文本与左侧饼图重叠,尝试subplots_adjust方法未解决,同时需要为每个饼图添加独立标注。


一、解决文本重叠问题

重叠的核心原因有两个:

  • 饼图设置的radius=1.5过大,导致饼图溢出子图边界
  • 画布figsize=(5,5)宽度不足,两个子图横向空间拥挤

推荐修改方案:

  1. 增大画布宽度:把figsize调整为(10,5),给两个饼图预留足够的横向展示空间
  2. 减小饼图半径:将radius改为1,避免饼图超出子图范围
  3. 自动调整间距:用plt.tight_layout()替代手动调整subplots_adjust,它会自动优化子图间距,避免元素重叠

二、为每个饼图添加独立标注

直接通过子图对象的set_title()方法即可为每个饼图添加标题,也可以用plt.text()自定义标注的位置和样式。


修改后的完整代码

import matplotlib.pyplot as plt

labels1, values1 = [0, 1], [0.7099673202614379, 0.2900326797385621]
labels2, values2 = ['Pass', 'Withdrawn', 'Fail', 'Distinction'], [0.3510392609699769, 0.33102386451116245, 0.2763664357197845, 0.04157043879907621]

# 调整画布尺寸,增加横向空间
fig = plt.figure(figsize=(10,5), dpi=300)

# 第一个子图与饼图
ax1 = fig.add_subplot(121)
ax1.pie(values1, radius=1, autopct='%0.2f%%', labels=labels1)
ax1.set_title('类别统计1')  # 添加第一个饼图的标注

# 第二个子图与饼图
ax2 = fig.add_subplot(122)
ax2.pie(values2, radius=1, autopct='%0.2f%%', labels=labels2)
ax2.set_title('类别统计2')  # 添加第二个饼图的标注

# 自动优化子图间距
plt.tight_layout()

plt.show()

补充说明

如果坚持使用小画布,也可以将subplots_adjust的wspace参数调至更大值(比如wspace=1),但相比之下,增大画布+tight_layout的组合效果更稳定,不会出现元素挤压的情况。

内容的提问来源于stack exchange,提问作者Saif

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 01:55:34