Matplotlib:饼图中的重叠标签

Matplotlib: Overlapping labels in pie chart

我必须为以下数据制作饼图:

但是,由于较大的数字以百为单位,而较小的数字小于 1,因此图表的标签由于重叠而变得难以辨认。例如,这是新加坡的图表:

我试过减小字体大小并增加图形大小,但因为它们重叠太多,所以这样做根本没有帮助。以下是我的图表所需的代码:

import matplotlib.pyplot as plt
plt.pie(consumption["Singapore"], labels = consumption.index)
fig = plt.gcf()
fig.set_size_inches(8,8)
ax = plt.gca()
handles, labels = ax.get_legend_handles_labels()
labels, handles = zip(*sorted(zip(labels, handles), key=lambda t: t[0], reverse=True))
plt.show()

有什么办法可以解决这个问题吗?

标签字符重叠的问题无法通过编程完全解决。如果您只处理挑战,请先将它们分组以汇总标签数量。分组的数据框针对饼图。但是还是重叠了,所以获取当前标签位置,改变重叠标签的位置。

new_df = consumption.groupby('Singapore')['Entity'].apply(list).reset_index()
new_df['Entity'] = new_df['Entity'].apply(lambda x: ','.join(x)) 
new_df

    Singapore   Entity
0   0.000000    Biofuels,Wind,Hydro,Nuclear
1   0.679398    Other
2   0.728067    Solar
3   5.463305    Coal
4   125.983605  Gas
5   815.027694  Oil

import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(8,8))

wedges, texts = ax.pie(new_df["Singapore"], wedgeprops=dict(width=0.5), startangle=0, labels=new_df.Entity)
# print(wedges, texts)

texts[0].set_position((1.1,0.0))
texts[1].set_position((1.95,0.0))
texts[2].set_position((2.15,0.0))

plt.legend()

plt.show()