我想将饼图中的标签从中心移动到每个楔形的开头:
import matplotlib.pyplot as plt
# Setting labels for items in Chart
Employee = ['A', 'B', 'C',
'D', 'E']
# Setting size in Chart based on
# given values
Salary = [40000, 50000, 70000, 54000, 44000]
# colors
colors = ['#FF0000', '#0000FF', '#FFFF00',
'#ADFF2F', '#FFA500']
fig, ax = plt.subplots(figsize=(5,5), facecolor = "#FFFFFF")
# Pie Chart
wedges, texts = ax.pie(Salary, colors=colors,
labels=Employee, labeldistance=0.8,
wedgeprops=dict(width=0.35),)
我能够获取标签的坐标并将其替换为:
for lbl,p in zip(Employee,texts, ):
x, y = p.get_position()
print(x,y,p)
ax.annotate(lbl, xy=(x,y), size=12, color = "w")
但我不知道如何移动它们以跟随圆圈。
我还可以通过调用 wedges 属性来获取每个楔形的起始角度,但由于饼图是在笛卡尔轴而不是极坐标轴上绘制的,所以我也不知道该怎么做?
我不能为此使用 barh (我的图表比此处显示的更复杂)。
这可能吗?
这是我想要放置标签的地方。
您可以根据楔形的属性自行计算标签的位置:
wedges, texts = ax.pie(Salary, colors=colors,
#labels=Employee, labeldistance=0.8,
wedgeprops=dict(width=0.35),)
for lbl, w in zip(Employee, wedges):
angle = w.theta2-10
r = 0.8
print(lbl, angle, np.deg2rad(angle))
x = r*np.cos(np.deg2rad(angle))
y = r*np.sin(np.deg2rad(angle))
ax.annotate(lbl, xy=(x,y), size=12, color='w',
ha='center', va='center', weight='bold')
输出: