Carta de buñuelo de python

Así que estoy usando este código para crear un gráfico de anillos con python (inspirado en esta receta de la ttwig de anillos ):

def make_pie(sizes, text,colors,labels): import matplotlib.pyplot as plt import numpy as np col = [[i/255. for i in c] for c in colors] fig, ax = plt.subplots() ax.axis('equal') width = 0.35 kwargs = dict(colors=col, startangle=180) outside, _ = ax.pie(sizes, radius=1, pctdistance=1-width/2,labels=labels,**kwargs) plt.setp( outside, width=width, edgecolor='white') kwargs = dict(size=20, fontweight='bold', va='center') ax.text(0, 0, text, ha='center', **kwargs) plt.show() c1 = (226,33,7) c2 = (60,121,189) make_pie([257,90], "Gender (AR)",[c1,c2],['M','F']) 

lo que resulta en:

introduzca la descripción de la imagen aquí

Mi problema es que ahora quiero los porcentajes respectivos. Para eso simplemente estaba agregando el argumento:

 autopct='%1.1f%%' 

Me gusta esto:

 kwargs = dict(colors=col, startangle=180,autopct='%1.1f%%') 

pero esto resulta en el siguiente error:

 Traceback (most recent call last): File "draw.py", line 30, in  make_pie([257,90], "Gender (AR)",[c1,c2],['M','F']) File "draw.py", line 13, in make_pie outside, _ = ax.pie(sizes, radius=1, pctdistance=1-width/2,labels=labels,**kwargs) ValueError: too many values to unpack 

Entonces, ¿qué estoy haciendo mal?

De la cadena de documentos:

 If *autopct* is not *None*, return the tuple (*patches*, *texts*, *autotexts*), where *patches* and *texts* are as above, and *autotexts* is a list of :class:`~matplotlib.text.Text` instances for the numeric labels. 

Entonces, si desea descomprimir el resultado de pie() usando autopct , necesita 3 valores:

 kwargs = dict(colors=col, startangle=180, autopct='%1.1f%%') outside, _, _ = ax.pie(sizes, radius=1, pctdistance=1-width/2, labels=labels,**kwargs) 

O tal vez sea más robusto sin desempaquetar, por lo que funciona con o sin autopct :

 outside = ax.pie(sizes, radius=1, pctdistance=1-width/2, labels=labels,**kwargs)[0]