You need to enable JavaScript to run this app. Matplotlib饼图优化:解决标签重叠、添加引导线、调整字号问题
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib饼图优化:解决标签重叠、添加引导线、调整字号问题

用户绘制的饼图

问题解决方案

1. textprops修改fontsize不生效的原因

你设置的字体大小没有直观变化,核心原因是默认画布尺寸过小,渲染时字体被自动压缩适配画布,只需要在创建子图时指定足够大的figsize即可看到字体大小的实际变化。

2. 添加饼块与标签的引导线

matplotlib的pie方法没有内置引导线参数,我们可以先获取每个饼块的角度、中心位置,再通过plot方法为每个标签绘制对应的连接线。

3. 解决顶部标签重叠问题

调用pie方法时会返回所有标签的文本对象,直接修改重叠标签的y轴坐标即可实现上移,避免重叠。

完整可运行代码

import matplotlib.pyplot as plt
import numpy as np

labels = 'Control & Handling of Events', 'Arch. Structures & Viewpoints', 'Distribution of Components', 'Arch. Styles', 'Concurrency', 'Interaction & Presentation', 'Error & Exeption Handling', 'Fam. of Prog. & Frameworks','Security & Safety', 'Design Patterns', 'Arch. Design Decisions', 'Data Persistence'
sizes = [59, 40, 21, 21, 19, 17, 11, 8, 8, 5, 4, 4]
colors = ['#00305d','#003d69','#014b76','#025883', '#03668f','#04749c','#0481a9','#058fb6', '#069dc2','#07aacf','#08b8dc','#09c6e9']

# 调整画布尺寸,保证字体大小可以正常显示
fig1, ax1 = plt.subplots(figsize=(14, 10))
# 接收pie返回的楔形对象、标签文本对象
wedges, texts = ax1.pie(sizes, colors=colors, 
                        labels=['%s, (%1.1f%%)' % (l, s) for l, s in zip(labels, sizes)], 
                        shadow=False, 
                        textprops={'color':"k", 'fontsize': 12}, 
                        startangle=90, 
                        labeldistance=1.2) # 调远标签距离,预留引导线空间

# 调整第一个标签的位置,向上移动避免重叠,移动幅度可自行修改
texts[0].set_y(texts[0].get_y() + 0.08)

# 为每个标签添加引导线
for wedge, text in zip(wedges, texts):
    # 获取饼块的角度中点
    ang = (wedge.theta2 + wedge.theta1) / 2
    # 计算引导线的起点(饼块边缘坐标)
    x1 = wedge.r * 0.95 * np.cos(np.deg2rad(ang))
    y1 = wedge.r * 0.95 * np.sin(np.deg2rad(ang))
    # 引导线终点(标签附近坐标)
    x2 = text.get_position()[0] * 0.95
    y2 = text.get_position()[1] * 0.95
    # 绘制连接线,颜色、粗细可自行调整
    ax1.plot([x1, x2], [y1, y2], color='gray', linewidth=1)

ax1.axis('equal')
plt.tight_layout() # 自动调整布局避免标签被截断
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 23:24:03