¿Cómo se muestran los valores reales en el gráfico circular matplotlib (Python)?

Tengo un gráfico circular que dibuja los valores extraídos de un archivo CSV. La proporción de los valores se muestra actualmente con el porcentaje mostrado “autopct = ‘% 1.1f %%'”. ¿Hay alguna manera de mostrar los valores reales que están representados en el conjunto de datos de cada sector?

#Pie for Life Expectancy in Boroughs import pandas as pd import matplotlib import matplotlib.pyplot as plt # show plots inline %matplotlib inline # use ggplot style matplotlib.style.use('ggplot') #read data lifeEx = pd.read_csv('LEpie.csv') #Select columns df = pd.DataFrame() df['LB'] = lifeEx[['Regions']] df['LifeEx'] = lifeEx[['MinLF']] colorz = ['#B5DF00','#AD1FFF', '#BF1B00','#5FB1FF','#FFC93F'] exploda = (0, 0, 0, 0.1, 0) #plotting plt.pie(df['LifeEx'], labels=df['LB'], colors=colorz, autopct='%1.1f%%', explode = exploda, shadow = True,startangle=90) #labeling plt.title('Min Life expectancy across London Regions', fontsize=12) 

Usando la palabra clave autopct

Como sabemos que el porcentaje mostrado por la sum de todos los valores reales debe ser el valor real, podemos definir esto como una función y suministrar esta función a plt.pie utilizando la palabra clave autopct .

 import matplotlib.pyplot as plt import numpy labels = 'Frogs', 'Hogs', 'Dogs' sizes = numpy.array([5860, 677, 3200]) colors = ['yellowgreen', 'gold', 'lightskyblue'] def absolute_value(val): a = numpy.round(val/100.*sizes.sum(), 0) return a plt.pie(sizes, labels=labels, colors=colors, autopct=absolute_value, shadow=True) plt.axis('equal') plt.show() 

Se debe tener cuidado ya que el cálculo implica algún error, por lo que el valor suministrado solo es exacto para algunos decimales.

Un poco más avanzado puede ser la siguiente función, que intenta recuperar el valor original de la matriz de entrada comparando la diferencia entre el valor calculado y la matriz de entrada. Este método no tiene el problema de la inexactitud, sino que se basa en valores de entrada que son suficientemente distintos entre sí.

 def absolute_value2(val): a = sizes[ numpy.abs(sizes - val/100.*sizes.sum()).argmin() ] return a 

Cambio de texto después de la creación de pie

La otra opción es primero dejar que el gráfico se dibuje con los valores de porcentaje y reemplazarlos después. Para este fin, uno podría almacenar las tags autopct devueltas por plt.pie() y recorrerlas para reemplazar el texto con los valores de la matriz original. Atención, plt.pie() solo devuelve tres argumentos, el último son las tags de interés, cuando se proporciona la palabra clave autopct por lo que la configuramos en una cadena vacía aquí.

 labels = 'Frogs', 'Hogs', 'Dogs' sizes = numpy.array([5860, 677, 3200]) colors = ['yellowgreen', 'gold', 'lightskyblue'] p, tx, autotexts = plt.pie(sizes, labels=labels, colors=colors, autopct="", shadow=True) for i, a in enumerate(autotexts): a.set_text("{}".format(sizes[i])) plt.axis('equal') plt.show()