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

Matplotlib饼图标签水平旋转及仪表盘标签对齐问题

让Matplotlib仪表盘标签水平对齐扇区中点的实现方法

我来帮你搞定这个需求!要让饼图的标签水平显示,并且精准对齐每个扇区的中点,我们可以放弃原代码里的rotatelabels参数,手动计算并调整每个标签的旋转角度和对齐方式。下面是修改后的完整代码:

import matplotlib.pyplot as plt

group_size = [10, 10, 10, 10, 10, 50]
labels = ['AAAA', 'BBBB', 'CCCC', 'DDDD', 'EEEE', '']
fig, ax = plt.subplots()
ax.axis('equal')

# 绘制外层黑色圆环
pie = ax.pie(group_size, radius=2.2, colors=['k'], startangle=180, counterclock=False)

# 绘制内层带标签的饼图,先取消强制旋转标签
pie2 = ax.pie(group_size, radius=2, labeldistance=0.7, labels=labels, 
              startangle=180, counterclock=False, textprops={'ha': 'center'})

# 逐个调整标签,让它们水平对齐扇区中点
for text in pie2[1]:
    # 获取标签的坐标位置,计算对应的角度
    x, y = text.get_position()
    angle = plt.degrees(plt.math.atan2(y, x))
    # 计算旋转角度,确保文字水平且可读(避免上下颠倒)
    if angle < -90 or angle > 90:
        text.set_rotation(-angle + 90)
    else:
        text.set_rotation(-angle)
    # 强制设置对齐方式,确保和中点完美匹配
    text.set_horizontalalignment('center')
    text.set_verticalalignment('center')

plt.show()

关键修改点说明:

  • 移除了原代码中的rotatelabels=270,避免系统强制旋转标签
  • 用textprops={'ha': 'center'}初始化标签的水平对齐方式为中心
  • 遍历每个标签文本,通过坐标计算对应扇区的中点角度,然后调整旋转值让文字始终水平显示,同时处理了文字颠倒的情况,保证可读性
  • 强制设置水平和垂直对齐为中心,确保标签精准对应扇区中点

这样调整后,你的仪表盘标签就会水平展示,并且每个标签都完美对齐对应扇区的中点啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:15:29