如何在不使用代理艺术家的情况下将图例添加到Matplotlib饼图中?

时间:2019-02-12 07:26:20

标签: python matplotlib pie-chart

我试图通过合并图例来减少使用matplotlib制作的饼图的大小。我认为两个最大的问题是我有18个饼图,并且使用示例代码将颜色映射图合并到一个我不太了解的时髦的numpy数组中。

我已经进行了一些挖掘,我想我可能仍可以在不使用代理艺术家的情况下合并图例(我的代码出现此错误-“传奇不支持)...实例。代理艺术家可能是代替”)

我没有使用此解决方案的版本-How to add a legend to matplotlib pie chart? 理想情况下,我希望我的图例与此处显示的图例相似,只是带有更多的楔形标签。想要在图表的左下方添加一个图例,以便我可以减小其尺寸并关闭图表周围的标签。

我还尝试按照此处的建议在pie_wedge_collection中添加逗号-Matplotlib Legends not working 但这也不起作用...

任何帮助将不胜感激。谢谢。

import matplotlib.pyplot as plt
# the pie slices are these percentages:
type_list = [1.37, 3.88, 23.72, 1.11, 0.08, 0.13, 6.74, 20.55, 5.2,\
18.46, 0.48, 6.68, 11.6]
slices = type_list
slices = sorted(slices)

len_slice = int(len(slices)/2)
large = slices[:len_slice]
small = slices[len_slice:]

reordered = large[::2] + small[::2] + large[1::2] + small[1::2]

cmap = plt.cm.prism
colors = cmap(np.linspace(0., 1., len(slices)))

labels = 'Civil Rights', 'Criminal Allegation', 'Departmental Violation', 'Domestic', 'Drugs',\
'Falsification', 'Harassment', 'Lack of Service','Non-Investigatory Incident', 'Physical Abuse',\
'Sexual Crime/Misconduct', 'Unprofessional Conduct', 'Verbal Abuse'

fig = plt.figure(figsize=[14,14.76])
ax = fig.add_subplot(111)

angle = 164.5 + float(sum(small[::2])) / sum(reordered) * 360

pie_wedge_collection = ax.pie(reordered, colors=colors, labels=labels, shadow=True, labeldistance=1.05, startangle=angle);

for pie_wedge in pie_wedge_collection[0]:
    pie_wedge.set_edgecolor('white')

ax.set_title("Complaints Against Philadelphia Police \n (2013 - Present) \n Source:OpenDataPhilly.com");

# user warning comes here (with no legend)...  
plt.legend(pie_wedge_collection, labels, loc="best")
plt.axis('equal')
plt.tight_layout()
plt.show()

Here's a link to the resulting pie chart thus far.

1 个答案:

答案 0 :(得分:0)

这里与其他答案相同。

base_original_price