Python

Creación de gráficos de barras y gráficos de columnas con Seaborn

Los gráficos de barras y los gráficos de columnas son una forma altamente efectiva de visualizar datos categóricos. Permitiendo comparar los valores asociados a cada categoría. Seaborn, una de las principales bibliotecas de visualización de datos en Python, ofrece varias funciones para crear este tipo de gráficos. En esta entrada, se mostrará las principales opciones que existen para crear gráficos de barras y gráficos de columnas con Seaborn. Se mostrará cómo representar variables categóricas en el eje x, valores numéricos en el eje y, y personalizar los gráficos para resaltar la información clave.

Carga de datos de ejemplo

Antes de poder crear gráficos de barras o gráficos de columnas con Seaborn, es necesario importar un conjunto de datos en un DataFrame de Pandas. Para hacer más fácil que cualquier lector pueda repetir los ejemplos se utilizará el conjunto de datos “tips” que viene con Seaborn. Este conjunto de datos contiene información sobre propinas en un restaurante. Para cargarlo en un DataFrame de Pandas se puede utilizar el siguiente código.

import seaborn as sns

# Cargar el conjunto de datos "tips"
tips_data = sns.load_dataset("tips")

# Imprimir los primeros registros del conjunto de datos
print(tips_data.head())
   total_bill   tip     sex smoker  day    time  size
0       16.99  1.01  Female     No  Sun  Dinner     2
1       10.34  1.66    Male     No  Sun  Dinner     3
2       21.01  3.50    Male     No  Sun  Dinner     3
3       23.68  3.31    Male     No  Sun  Dinner     2
4       24.59  3.61  Female     No  Sun  Dinner     4

Creación de gráficos de barras

Los gráficos de barras son ideales para mostrar los valores asociados con diferentes categorías de datos. La función para crear este tipo de gráficos Seaborn es barplot(). Una función que necesita los datos en un DataFrame de Pandas, indicado mediante el parámetro data, la variable categórica, iniciada mediante el parámetro x, y los valores que se desean mostrar, lo que se indica mediante el parámetro y. Para crear una gráfica de barras en la que se muestre el promedio de la columna total_bill para cada uno de los días se la semana (variable days) se puede usar el siguiente código.

import matplotlib.pyplot as plt

# Crear un gráfico de barras de la columna "day" y "total_bill" promedio
sns.barplot(data=tips_data, x='day', y='total_bill', errorbar=None)

# Mostrar el gráfico
plt.show()
Gráfico de barras creado con Seaborn

Como se explicó en la introducción de esta serie, los gráficos de barras muestran por defecto el promedio de la variable indicada y agregan a cada una de las barras una línea con el error. Para evitar que se muestre esta línea se debe indicar mediante el parámetro errorbar asignando el valor None.

Creación de gráficos de columnas

Los gráficos de columnas son similares a los gráficos de barras, pero muestran las barras de manera horizontal en lugar de vertical. Para conseguir estas gráficas en Seaborn también se tiene que utilizar la función barplot() pero usando la propiedad orient para indicar que la orientación debe ser horizontal con el valor 'horizontal'. Así, se puede repetir la gráfica anterior como un gráfico de columnas simplemente agregando esta propiedad como se muestra a continuación.

# Crear un gráfico de columnas de la columna "day" y "total_bill" promedio
sns.barplot(data=tips_data, y='day', x='total_bill', orient='horizontal', errorbar=None)

# Mostrar el gráfico
plt.show()
Gráfico de columnas creado con Seaborn

Personalización de gráficos de barras y gráficos de columnas con Seaborn

Seaborn ofrece una amplia gama de opciones de personalización para adaptar los gráficos de barras y gráficos de columnas a las necesidades de todos los usuarios. Es posible ajustar los colores, agregar etiquetas, cambiar los estilos, entre otras opciones.

Cambiar los colores de las barras o columnas

Es posible personalizar los colores de las barras o columnas utilizando la opción palette en la función barplot(). Por ejemplo, puedes utilizar una paleta de colores predefinida de Seaborn, como "Set2".

# Crear un gráfico de barras con colores personalizados
sns.barplot(data=tips_data, x='day', y='total_bill', palette='Set2', errorbar=None)

# Mostrar el gráfico
plt.show()
Gráfico de barras en el que se ha modificado los colores por defecto

Agregar etiquetas a las barras o columnas

También es posible agregar etiquetas a las barras o columnas para mostrar los valores asociados utilizando la función annotate() de Matplotlib. A continuación, se muestra un ejemplo de cómo hacerlo.

# Crear un gráfico de barras con etiquetas personalizadas
ax = sns.barplot(data=tips_data, x='day', y='total_bill', errorbar=None)

# Agregar etiquetas a las barras
for p in ax.patches:
    ax.annotate(format(p.get_height(), '.2f'), (p.get_x() + p.get_width() / 2., p.get_height()), ha = 'center', va = 'center', xytext = (0, 10), textcoords = 'offset points')

# Mostrar el gráfico
plt.show()
Gráfico de barras con etiquetas con el valor mostrado

En este ejemplo, la función annotate() para agregar etiquetas al centro de cada barra. Mediante el formato '.2f' se especifica que se desea mostrar los valores con dos decimales.

Ajustar el tamaño de las barras o columnas

El tamaño de las barras o columnas empleadas en el gráfico se puede modificar mediante el parámetro linewidth de la función barplot(). Por ejemplo, se puede aumentar el ancho de las barras a 2 puntos con el siguiente código. Para que se puedan apreciar los cambios es necesario cambiar el estilo de la gráfica, para lo que se debe usar la función `set_style()` de Seaborn.

# Establecer el estilo del gráfico
sns.set_style('darkgrid')

# Crear un gráfico de barras con barras más anchas
sns.barplot(data=tips_data, x='day', y='total_bill', palette='Set2' , linewidth=2, errorbar=None)

# Mostrar el gráfico
plt.show()
Gráfico de barras con los colores cambiados y el ancho de las barras

Mostrar otros estadísticos en las barras o columnas

Por defecto la función barplot() muestra la media de los valores, pero esto es algo que se puede cambiar mediante el parámetro estimator. En lugar de la media se puede usar valores como la suma, la media o el valor máximo. Así para ver la propina máxima por día se puede usar el siguiente código.

# Crear un gráfico de barras de la columna "day" y "total_bill" promedio
sns.barplot(data=tips_data, x='day', y='total_bill', estimator=max, errorbar=None)

# Mostrar el gráfico
plt.show()
Gráfico de barras en el que se muestra el valor máximo, no la media

Conclusiones

Los gráficos de barras y gráficos de columnas es una parte fundamental del análisis de datos. Siendo también una parte clave de la comunicación visual de resultados. La creación de gráficos de barras y gráficos de columnas con Seaborn es una tarea sencilla gracias a la función barplot(). Una función que cuenta con múltiples opciones para hacer que los gráficos generados sean exactamente los que se necesitan.

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: Seaborn

Recent Posts

BG/BB: el modelo de CLV para compras en períodos discretos

Los dos artículos anteriores de la serie cubrieron BG/NBD, el modelo para negocios donde el…

15 horas ago

Por Qué las Contraseñas Largas son más Seguras que las Complejas

"Tu contraseña debe tener al menos 8 caracteres, una mayúscula, un número y un símbolo…

6 días ago

Gini, KS y AUC: Cómo Medir la Calidad de un Modelo de Credit Scoring

Cuando un analista de riesgo presenta un nuevo scorecard ante el comité de dirección, la…

1 semana ago

Curiosidad: De dónde vienen foo, bar y foobar

Si revisáis código o documentación de otros programadores, tarde o temprano os toparéis con dos…

2 semanas ago

BG/NBD + Gamma/Gamma: el modelo probabilístico para CLV en compras continuas

Los dos artículos anteriores cubrieron el CLV clásico —una fórmula útil pero que trata a…

2 semanas ago

Errores habituales al trabajar con DataFrames grandes en Pandas (y cómo evitarlos)

Hay un momento muy concreto en la vida de casi todo análisis: el código que…

3 semanas ago

This website uses cookies.