Matplotlib绘制双饼图:解决文本重叠及添加子图标题问题
解决饼图文本重叠及添加独立标注问题
问题背景
想要在同一画布中并排绘制两个饼图,但右侧饼图的文本与左侧饼图重叠,尝试subplots_adjust方法未解决,同时需要为每个饼图添加独立标注。
一、解决文本重叠问题
重叠的核心原因有两个:
- 饼图设置的
radius=1.5过大,导致饼图溢出子图边界 - 画布
figsize=(5,5)宽度不足,两个子图横向空间拥挤
推荐修改方案:
- 增大画布宽度:把
figsize调整为(10,5),给两个饼图预留足够的横向展示空间 - 减小饼图半径:将
radius改为1,避免饼图超出子图范围 - 自动调整间距:用
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
相关产品推荐
相关产品推荐

