Skip to main content
 首页 » 编程设计

python之matplotlib 饼图 : rotate labels horizontally

2025年05月04日21lori

使用 matplot 通过以下代码创建一个小仪表:

    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([10,10,10,10,10,50], radius=2,  labeldistance=0.7, labels=labels, rotatelabels = 270, 
startangle=180,counterclock=False) 
    plt.show() 

我试图让标签水平移动并与每个楔形的中点对齐(但楔形内的文本):

使用 rotatelabel=True,我得到以下信息:

关于如何实现图表标签的水平旋转有什么想法吗?

请您参考如下方法:

您需要手动旋转饼图标签。为此,您可以遍历标签并根据需要设置旋转。

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([10,10,10,10,10,50], radius=2,  labeldistance=0.9, labels=labels,  
              rotatelabels =True, startangle=180,counterclock=False) 
 
plt.setp(pie2[1], rotation_mode="anchor", ha="center", va="center") 
for tx in pie2[1]: 
    rot = tx.get_rotation() 
    tx.set_rotation(rot+90+(1-rot//180)*180) 
 
plt.show()