Как использовать autopct matplotlib? - PullRequest
42 голосов
/ 30 мая 2011

Я хотел бы создать круговую диаграмму 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()

Ответы [ 4 ]

94 голосов
/ 30 мая 2011

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).

6 голосов
/ 31 июля 2018

Вы можете сделать:

plt.pie(values, labels=labels, autopct=lambda p : '{:.2f}%  ({:,.0f})'.format(p,p * sum(values)/100))
6 голосов
/ 30 августа 2011
val=int(pct*total/100.0)

должно быть

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

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

3 голосов
/ 08 января 2019

Лучше использовать лямбду и формат

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

path = r"C:\Users\byqpz\Desktop\DATA\raw\tips.csv"

df = pd.read_csv(path, engine='python', encoding='utf_8_sig')

days = df.groupby('day').size()

sns.set()
days.plot(kind='pie', title='Number of parties on different days', figsize=[8,8],
          autopct=lambda p: '{:.2f}%({:.0f})'.format(p,(p/100)*days.sum()))
plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...