¿Cómo anotar barras en diagramas de barras agrupados en Python?

Un diagrama de barras es un gráfico que representa la relación entre una característica categórica y una numérica. Muchas barras rectangulares corresponden a cada categoría de la característica categórica y el tamaño de estas barras representa el valor correspondiente. Usando diagramas de barras agrupadas, podemos estudiar la relación entre más de dos características.

En Python, podemos trazar un gráfico de barras usando la biblioteca Matplotlib o usando la biblioteca seaborn , que es una biblioteca de nivel superior construida en Matplotlib y también admite estructuras de datos pandas . En este artículo, hemos utilizado la función seaborn.barplot() para trazar los gráficos de barras agrupadas.

Otro aspecto importante de la visualización de datos mediante diagramas de barras es el uso de anotaciones, es decir, la adición de texto para una mejor comprensión del gráfico. Esto se puede lograr usando la función annotate() en el módulo pyplot de la biblioteca matplotlib como se explica en los pasos a continuación.

Paso 1: Importación de las bibliotecas y el conjunto de datos utilizado. Aquí hemos utilizado el conjunto de datos Titanic, que está integrado con seaborn. 

Python3

# importing the libraries used
import seaborn as sns
import matplotlib.pyplot as plt
  
# Importing the dataset
df = sns.load_dataset("titanic")
print(df.head())

Producción:

Conjunto de datos original

Trazaremos un diagrama de barras agrupadas para analizar la edad promedio y el conteo de viajeros en Titanic, por género en diferentes clases de boletos. Para eso, necesitamos transformar el conjunto de datos.

Paso 2: Transformar el conjunto de datos usando agrupación y agregación en el conjunto de datos original.

Python3

# transforming the dataset for barplot
data_df = df.groupby(['sex', 'class']).agg(
    avg_age=('age', 'mean'), count=('sex', 'count'))
  
data_df = data_df.reset_index()
print(data_df.head())

Producción:

conjunto de datos transformado

Explicación: Los diagramas de barras agrupadas requieren al menos dos características categóricas y una característica numérica. Aquí, hemos filtrado la función ‘clase’ para categorizar y la función ‘sexo’ para agrupar las barras usando la función pandas.Dataframe.groupby() . Luego agregamos la edad media y el conteo de cada grupo usando pandas.core.groupby.DataFrameGroupBy.agg() . Las operaciones anteriores dieron como resultado un marco de datos de múltiples índices, por lo tanto, restablecimos el índice para obtener el conjunto de datos que se muestra a continuación.

Paso 3: ahora, trazamos un diagrama de barras simple usando el conjunto de datos transformado usando la función seaborn.barplot(). 

Python3

# code to plot a simple grouped barplot
plt.figure(figsize=(8, 6))
sns.barplot(x="class", y="avg_age",
            hue="sex", data=data_df,
            palette='Greens')
  
plt.ylabel("Average Age", size=14)
plt.xlabel("Ticket Class", size=14)
plt.title("Simple Grouped Barplot", size=18)

Producción :

Tenga en cuenta que hemos utilizado el argumento de palabra clave ‘tono’ para agrupar las barras en función de la función ‘sexo’.

Paso 4: Anotar las barras

Python3

# code for annotated grouped barplot
plt.figure(figsize=(8, 6))
splot = sns.barplot(x="class", y="avg_age", hue="sex",
                    data=data_df, palette='Greens')
  
for p in splot.patches:
    splot.annotate(format(p.get_height()),
                   (p.get_x() + p.get_width() / 2., p.get_height()),
                   ha='center', va='center',
                   xytext=(0, 9),
                   textcoords='offset points')
      
plt.ylabel("Average Age", size=14)
plt.xlabel("Ticket Class", size=14)
plt.title("Grouped Barplot with annotations", size=18)

Producción:

Explicación: En el código anterior, hemos usado el atributo ‘parches’ del objeto de gráfico marino para iterar sobre cada barra. Hemos calculado la altura, las coordenadas y hemos puesto texto usando la función de anotación para cada barra.

Paso 5: dado que cada barra representa la edad y poner decimales no hace que su valor sea sensato. Personalizaremos nuestro texto redondeando al entero más cercano y luego usando la función format() como se muestra en el código a continuación.

Python3

# code for annotated barplot
plt.figure(figsize=(8, 6))
splot = sns.barplot(x="class", y="avg_age", hue="sex",
                    data=data_df, palette='Greens')
  
plt.ylabel("Average Age", size=14)
plt.xlabel("Ticket Class", size=14)
plt.title("Grouped Barplot with annotations", size=18)
for p in splot.patches:
    splot.annotate(format(round(p.get_height()), '.0f')+"Years",
                   (p.get_x() + p.get_width() / 2., p.get_height()),
                   ha='center', va='center',
                   size=14,
                   xytext=(0, -12),
                   textcoords='offset points')

Producción:

Además, al cambiar las coordenadas, hemos desplazado nuestro texto dentro de la barra. 

Publicación traducida automáticamente

Artículo escrito por yuvrajgrover y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *