Подтвердить что ты не робот

Как использовать автозаполнение matplotlib?

Я хотел бы создать круговую диаграмму matplotlib, которая имеет значение каждого клина, написанного поверх клина.

Документация предлагает использовать autopct для этого.

autopct: [Нет | форматирование строки | формат]     Если нет None, это строка или функция, используемые для обозначения клиньев с помощью их числовое значение. Этикетка будет расположенный внутри клина. Если это форматированной строки, метка будет FMT% проц. Если это функция, она будет называться.

К сожалению, я не уверен, что должна использоваться эта форматная форма или функция формата.

Используя этот базовый пример ниже, как я могу отображать каждое числовое значение поверх его клина?

plt.figure()
values = [3, 12, 5, 8] 
labels = ['a', 'b', 'c', 'd'] 
plt.pie(values, labels=labels) #autopct??
plt.show()
4b9b3361

Ответ 1

autopct позволяет отображать процентное значение с использованием форматирования строк Python. Например, если autopct='%.2f', то для каждого клина пирога строка формата '%.2f' и числовое процентное значение для этого клина pct, поэтому метка клина установлена ​​в строку '%.2f'%pct.

import matplotlib.pyplot as plt
plt.figure()
values = [3, 12, 5, 8] 
labels = ['a', 'b', 'c', 'd'] 
plt.pie(values, labels=labels, autopct='%.2f')
plt.show()

дает Simple pie chart with percentages

Вы можете сделать более интересные вещи, указав autopct. Чтобы отобразить как процентное значение, так и исходное значение, вы можете сделать это:

import matplotlib.pyplot as plt

# make the pie circular by setting the aspect ratio to 1
plt.figure(figsize=plt.figaspect(1))
values = [3, 12, 5, 8] 
labels = ['a', 'b', 'c', 'd'] 

def make_autopct(values):
    def my_autopct(pct):
        total = sum(values)
        val = int(round(pct*total/100.0))
        return '{p:.2f}%  ({v:d})'.format(p=pct,v=val)
    return my_autopct

plt.pie(values, labels=labels, autopct=make_autopct(values))
plt.show()

Pie chart with both percentages and absolute numbers.

Опять же, для каждого клина пирога matplotlib поставляет значение процента pct в качестве аргумента, хотя на этот раз оно отправляется как аргумент функции my_autopct. Метка клина установлена ​​на my_autopct(pct).

Ответ 2

val=int(pct*total/100.0)

должен быть

val=int((pct*total/100.0)+0.5)

для предотвращения ошибок округления.