matplotlib 如果标签已经旋转,如何在饼图中旋转自动旋转?

yzuktlbb  于 2023-05-29  发布在  其他
关注(0)|答案(1)|浏览(154)

我绘制了一个饼图并旋转了标签:

import pandas as pd
import matplotlib.pyplot as plt
data = { 'T1': [1,1,1,1,1,2,2,2,2,2, 1,1,1,1,1, 2,2,2,2,2, 1,1,1,1,1, 2,2,2,2],
         'T2':['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
               'B','B', 'B', 'B', 'B', 'B',
               'C', 'C', 'C', 'C','C', 'C', 'C',
              'D', 'D', 'D', 'D']}
df = pd.DataFrame(data)
df['T1']=df['T1'].astype(str)
fig, ax=plt.subplots()
values2=df['T2'].value_counts().sort_index()
pie1=ax.pie(values2, radius=1.3, autopct='%1.1f%%', labeldistance=0.4,   
       labels=['one', 'two', 'three', 'four'], rotatelabels=True, startangle=223.5, wedgeprops=dict(width=1, edgecolor='w'));
for tx in pie1[1]:
    rot = tx.get_rotation()
    tx.set_rotation(rot+90+(1-rot//180)*180)
hole = plt.Circle((0, 0), 0.5, facecolor='white')
plt.gcf().gca().add_artist(hole)
plt.show()

我不能第二次使用starangle来旋转百分比。我怎样才能给予饼图看得更清楚?
现在我试着用途:

for tx in pie1[2]:
    rotate = tx.get_rotation()
    tx.set_rotation(rotate+90+(1-rotate//180)*180)

因为我知道2中的2指的是自动扫描(我对吗?)。但是百分比的旋转方式与标签不同。有人知道为什么吗?

whitzsjs

whitzsjs1#

pie返回一个列表元组:

补丁:* 列表 *

matplotlib.patches.Wedge示例序列

textslist 标签Text示例列表。
自动文本:* 列表 *

数字标签的Text示例列表。这个只会被退回。
因此,您可以将其解包并旋转//中的 * 标签/百分比 *:

p, t, a = ax.pie(
    values2, radius=1.3, autopct='%1.1f%%', labeldistance=0.4,
    labels=['one', 'two', 'three', 'four'], rotatelabels=True, startangle=223.5,
    wedgeprops=dict(width=1, edgecolor='w')
)

for tx, pc in zip(t, a):
    rot = tx.get_rotation()
    tx.set_rotation(rot+90+(1-rot//180)*180)
    pc.set_rotation(tx.get_rotation())

输出:

相关问题