es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Pandas bar cómo etiquetar valores deseados

d = {'X':[1,2,3,4],'A': [50,40,20,60], '% of Total in A':[29.4,23.5,11.8,35.3] , 'B': [25,10,5,15], '% in A' :[50,25,25,25]}
df = pd.DataFrame(d)
ax = df.plot(x='X',y="A", kind="bar")
df.plot(x='X', y="B", kind="bar", ax=ax,color='C2')

   X   A  % of Total in A   B  % in A
0  1  50             29.4  25      50
1  2  40             23.5  10      25
2  3  20             11.8   5      25
3  4  60             35.3  15      25

Tengo el dataframe anterior y sé cómo dibujar un gráfico de barras apiladas en función de las dos columnas A y B.

¿Cómo puedo agregar etiquetas de valor encima de la barra, como por ejemplo para X=0, quiero etiquetar 50 (29.4% del total) sobre la barra azul, y 25 (50% en el grupo) sobre la barra verde dentro de la barra azul.

Cualquier ayuda es apreciada.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para agregar etiquetas de valor en la parte superior del gráfico de barras apiladas, puedes usar el método annotate() del objeto de eje Matplotlib (ax) e iterar a través de las barras para agregar las etiquetas. Aquí tienes un ejemplo de código que podrías usar:

    # crear el gráfico de barras apiladas
    ax = df.plot(x='X', y="A", kind="bar", stacked=True)
    
    # iterar a través de las barras para agregar las etiquetas de valor
    for i in ax.containers:
        # obtener la altura de la barra
        h = i.get_height()
        # obtener la posición de la barra
        x, y = i.xy
        # establecer el texto de la etiqueta
        label = f"{h:.0f} ({h/df['A'].sum()*100:.1f}% del total)\n{df.iloc[y]['% en A']:.0f}% en el grupo"
        # agregar la etiqueta encima de la barra
        ax.annotate(label, (x + i.get_width() / 2, h),
                    ha='center', va='bottom', color='white', fontsize=10,
                    xytext=(0, 2), textcoords='offset points')
    

    Este código itera a través de las barras en el gráfico (ax.containers) y obtiene su altura y posición. Luego calcula el texto de la etiqueta basado en los valores en el DataFrame, y agrega la etiqueta encima de la barra usando el método annotate().

    El gráfico resultante debería tener etiquetas de valor encima de cada barra apilada. Puedes ajustar el tamaño de fuente, color y posición de las etiquetas cambiando los parámetros en el método annotate().

Comments are closed.