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
相关产品推荐
相关产品推荐

