Легенда диаграммы в порядке уменьшение, кроме одного элемента
users = ['user1', 'user2', 'user3', 'user4', 'user5', 'user6', 'user7', 'user8', 'user9', 'Другие']
sizes = [15, 30, 45, 10, 23, 55, 22, 56, 11, 99]
plt.gca().axis("equal")
pie = plt.pie(sizes, startangle=90)
porcent = 100. * np.array(sizes) / sum(sizes)
labels = ['{0} - {1:1.2f} %'.format(i, j) for i, j in zip(users, porcent)]
print(labels)
print(sizes)
sort_legend = True
if sort_legend:
patches, labels, dummy = zip(*sorted(zip(pie[0], labels, sizes),
key=lambda x: x[2],
reverse=True))
plt.legend(patches, labels, bbox_to_anchor=(1, 0.5), loc="center right", fontsize=10,
bbox_transform=plt.gcf().transFigure)
plt.subplots_adjust(left=0.0, bottom=0.1, right=0.45)
plt.show()
Как сделать, чтобы элемент "Другие" был в конце легенды, а не в любом другом месте, в зависимости от его значения
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Притворитесь что соответствующее значение меньше нуля. Сортировка поместит его в конец:
# было
# key=lambda x: x[2],
# стало
key=lambda x: -1 if x[1] == labels[-1] else x[2],
Если вам не по душе придумывание значения (-1) которое меньше любого другого, то есть более общий вариант. Возвращается пара, первый элемент которой сортирует названия (весьма специфическим образом), второй - значения (как раньше):
# было
# key=lambda x: x[2],
# стало
key=lambda x: (x[1] != labels[-1], x[2]),
