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.

Cómo anotar gráficos de barras horizontales con conteo y porcentaje.

Cómo puedo obtener los recuentos y porcentajes a la derecha de cada barra? Actualmente solo sé cómo obtener los recuentos.

import pandas as pd
import matplotlib.pyplot as plt

age = ['0-17','18-60','61-80']

df3 = pd.DataFrame(data={'Hombres':[82,550,25], 'Mujeres':[72,309,7]}, index=age)
print(df3)

ax = df3.plot(kind='barh', ylabel='Edad', title='Recuento de pasajeros por edad y sexo')
ax.set(xlabel='No. de Pasajeros')

for c in ax.containers:
    # establecer la etiqueta de la barra
    ax.bar_label(c, fmt='%.0f', label_type='edge')

ax.legend(title='Sexo', bbox_to_anchor=(1, 1.02), loc='upper left')

ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)



plt.show()
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener los porcentajes a la derecha de cada barra, puede modificar el código para calcular los porcentajes y agregar las etiquetas usando el método ax.text (). Aquí hay un ejemplo:

    import pandas as pd
    import matplotlib.pyplot as plt
    
    age = ['0-17','18-60','61-80']
    
    df3 = pd.DataFrame(data={'Male':[82,550,25], 'Female':[72,309,7]}, index=age)
    
    # Calcular los porcentajes
    totals = df3.sum(axis=1)
    male_perc = df3['Male'] / totals * 100
    female_perc = df3['Female'] / totals * 100
    
    ax = df3.plot(kind='barh', ylabel='Age', title='Passenger Count by Age and Sex')
    ax.set(xlabel='No. of Passengers')
    
    for c in ax.containers:
        # establecer la etiqueta de la barra
        ax.bar_label(c, fmt='%.0f', label_type='edge')
    
        # agregar etiquetas de porcentaje
        index = c.get_offset()
        ax.text(c.get_x() + c.get_width() + 2, index, 
                f'{male_perc[index]:.1f}%', ha='left', va='center')
        ax.text(c.get_x() - 2, index, 
                f'{female_perc[index]:.1f}%', ha='right', va='center')
    
    ax.legend(title='Sex', bbox_to_anchor=(1, 1.02), loc='upper left')
    
    ax.spines['right'].set_visible(False)
    ax.spines['top'].set_visible(False)
    
    plt.show()
    

    Esto agregará las etiquetas de porcentaje en el lado derecho de cada barra. Cambie el formato de las etiquetas según sus preferencias.

Comments are closed.