webentwicklung-frage-antwort-db.com.de

Wie verwende ich matplotlib autopct?

Ich möchte ein Matplotlib-Kreisdiagramm erstellen, bei dem der Wert jedes Keils auf den Keil geschrieben wird.

Die Dokumentation schlägt vor, dass ich autopct verwenden sollte. 

autopct: [Keine | Formatzeichenfolge | Formatfunktion] Wenn nicht Keine, ist eine Zeichenfolge oder Funktion zum Beschriften der Keile mit ihr numerischer Wert. Das Label lautet im Keil platziert. Wenn es ein .__ ist. Formatzeichenfolge lautet die Beschriftung fmt% pct. Wenn es eine Funktion ist, wird es heißen.

Leider bin ich nicht sicher, wie diese Formatzeichenfolge oder Formatierungsfunktion aussehen soll.

Wie kann ich mit diesem grundlegenden Beispiel unten jeden numerischen Wert über seinem Keil anzeigen?

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

Mit autopct können Sie den Prozentwert mithilfe der Python-Zeichenfolgenformatierung anzeigen. Wenn zum Beispiel autopct='%.2f', dann ist für jeden Kreiskeil die Formatzeichenfolge '%.2f' und der numerische Prozentwert für diesen Keil pct, sodass die Keilbezeichnung auf die Zeichenfolge '%.2f'%pct gesetzt wird. 

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

ergibt Simple pie chart with percentages

Sie können schickere Dinge tun, indem Sie eine aufrufbare Variable für autopct angeben. Um sowohl den Prozentwert als auch den ursprünglichen Wert anzuzeigen, können Sie Folgendes tun:

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.

Für jeden Tortenkeil liefert matplotlib wiederum den Prozentwert pct als Argument, obwohl dieses Mal als Argument an die Funktion my_autopct gesendet wird. Die Keilbezeichnung ist auf my_autopct(pct) gesetzt.

84
unutbu
val=int(pct*total/100.0)

sollte sein

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

rundungsfehler vermeiden.

7
Volsk

Du kannst tun:

plt.pie(values, labels=labels, autopct=lambda p : '{:.2f}%  ({:,.0f})'.format(p,p * sum(values)/100))
3
caydin

Die Verwendung von Lambda und Format kann besser sein

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

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

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