Saltar al contenido principal

Boxplots en Python: Guía completa para principiantes

¡Crea impresionantes gráficos de caja en Python! Este completo tutorial para principiantes cubre Matplotlib y Seaborn, ayudándote a visualizar y comparar distribuciones de datos.
Actualizado 29 jul 2024  · 15 min de lectura

¿Te has preguntado alguna vez cómo representar mejor las distribuciones de datos numéricos en Python? Pues bien, ¡tu mejor opción sería aprender a utilizar gráficos de caja! Los gráficos de caja son una forma estupenda de visualizar comparaciones de distribución entre varios grupos.

En este tutorial, veremos qué son los gráficos de caja, las distintas formas de crearlos en Python y algunos errores comunes de los principiantes.

¿Qué son los gráficos de caja de Python?

Los gráficos de caja, también conocidos como gráficos de caja y bigotes, son una forma estándar de mostrar la distribución de los datos basada en un resumen de cinco números: mínimo, primer cuartil (Q1), mediana, tercer cuartil (Q3) y máximo.

Los gráficos de caja son especialmente útiles para identificar valores atípicos y comprender la dispersión y asimetría de los datos. También se utilizan cuando se comparan varios grupos o se visualiza la distribución de una sola variable.

Componentes de Boxplot

Un boxplot típico tiene varios componentes como parte de su anatomía:

  1. Mediana: Es el valor medio de los datos, representado por una línea dentro del recuadro.
  2. Cajas: Representan el Rango Intercuartílico (IQR) de los datos, que representa el rango entre Q1 y Q3. Los bordes inferior y superior representan Q1 y Q3, respectivamente.
  3. Bigotes: Son líneas verticales que se extienden desde ambos extremos de la casilla para representar los valores mínimo y máximo, excluyendo cualquier valor atípico.
  4. Valores atípicos: Son puntos fuera de los bigotes considerados inusuales o extremos en comparación con el resto de los datos.
  5. Gorros: Son líneas horizontales en los extremos de los bigotes, que representan los valores mínimo y máximo, incluidos los valores atípicos.

Estos componentes se combinan para dar al diagrama de caja un significado estadístico y permitir comparaciones visuales fáciles entre distintos grupos de datos.

Python es una herramienta avanzada que puede ayudarnos a crear gráficos de caja. En las siguientes secciones, revisaremos distintos métodos para hacerlo.

Boxplots en Python: Guía paso a paso

Ahora que tenemos una comprensión básica de los gráficos de caja, veamos cómo crearlos utilizando Python. Varias bibliotecas de Python, como Matplotlib, Seaborn y Plotly, permiten crear gráficos de caja.

Para crear gráficos de caja en Python, primero hay que instalar las bibliotecas necesarias. Las principales bibliotecas necesarias son Matplotlib, Seaborn y Plotly.

Aquí tienes el código para instalarlos:

pip install matplotlib
pip install seaborn
pip install plotly==5.22.0

Tras la instalación, el siguiente paso es importar estas bibliotecas a tu entorno Python.

Asegúrate también de cargar los conjuntos de datos necesarios que utilizarás para tus gráficos de caja, si los hay.

#imports Matplotlib library and assigns shorthand 'plt'
import matplotlib.pyplot as plt
#imports Seaborn library and assigns shorthand 'sns'
import seaborn as sns
#imports Plotly library and assigns shorthand 'px'
import plotly.express as px

Gracias a la versatilidad de Python, crear un simple boxplot requiere un código mínimo. Empecemos con la biblioteca más común, Matplotlib.

Para crear un boxplot con Matplotlib, importa las bibliotecas necesarias:

import matplotlib.pyplot as plt
import numpy as np

A continuación, vamos a preparar un conjunto de datos sencillo:

# Generates some random dataset
np.random.seed(10) 
data = np.random.normal(0, 1, 100)

Por último, vamos a crear el boxplot real e imprimirlo:

# Creates a boxplot
plt.boxplot(data) plt.title('Basic Boxplot') plt.show()

Aquí tienes los resultados:Gráfico Matplotlib básico

Si quieres crear boxplots separados en distintos subplots, puedes utilizar la función subplot. Esto te permite crear varios boxplots uno al lado del otro en una sola imagen. 

Aquí tienes el ejemplo de código completo:

import matplotlib.pyplot as plt
import numpy as np
# Generates multiple datasets
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(1, 2, 100)
data3 = np.random.normal(2, 1.5, 100)
# Creates subplots
fig, axs = plt.subplots(1, 3, figsize=(15, 5))
# Plots Boxplot for Data 1
axs[0].boxplot(data1)
axs[0].set_title('Data 1')
axs[0].set_xlabel('Sample')
axs[0].set_ylabel('Value')
# Plots Boxplot for Data 2
axs[1].boxplot(data2)
axs[1].set_title('Data 2')
axs[1].set_xlabel('Sample')
axs[1].set_ylabel('Value')
# Plots Boxplot for Data 3
axs[2].boxplot(data3)
axs[2].set_title('Data 3')
axs[2].set_xlabel('Sample')
axs[2].set_ylabel('Value')
# Adjusts layout
plt.tight_layout()
plt.show()

Éste es el gráfico resultante:

Boxplots múltiples en Matplotlib

Sin embargo, estas subparcelas no comparten el mismo eje y no son adecuadas para realizar comparaciones por categorías. Para múltiples gráficos de caja con el mismo eje, tendrás que crear gráficos de caja agrupados.

Los gráficos de caja agrupados son especialmente útiles para comparar distribuciones en varias categorías. Permiten una comprensión más matizada de los datos. Estas comparaciones pueden revelar diferencias que no son inmediatamente evidentes en otros gráficos.

Cada grupo se presenta en paralelo dentro del mismo gráfico, lo que facilita destacar las variaciones, tendencias y valores atípicos de las distintas subcategorías.

A continuación te explicamos cómo crear una subtrama agrupada:

# Generates grouped data
data_group1 = [np.random.normal(0, 1, 100), np.random.normal(1, 2, 100), np.random.normal(2, 1.5, 100)]
data_group2 = [np.random.normal(0, 1, 100), np.random.normal(1, 2, 100), np.random.normal(2, 1.5, 100)]
# Combines two data groups into a dataset
data = data_group1 + data_group2
# Creates grouped boxplots
plt.boxplot(data, positions=[1, 2, 3, 5, 6, 7], labels=['G1-D1', 'G1-D2', 'G1-D3', 'G2-D1', 'G2-D2', 'G2-D3'])
plt.title('Grouped Boxplots')
plt.xlabel('Group-Dataset')
plt.ylabel('Value')
plt.show()

Éste es el diagrama de caja agrupado producido por el código anterior:

Boxplots agrupados en Matplotlib

Puedes utilizar la personalización avanzada en Matplotlib para mejorar tus visualizaciones de datos.

Técnicas como la adición de medias, la adición de la desviación típica, la creación de gráficos de caja agrupados y el uso de gráficos de caja horizontales pueden proporcionar una mejor visión de la distribución de tus datos.

Personalizar los gráficos de caja en Python también te permite adaptar los elementos visuales a las especificaciones de tu proyecto.

Aquí tienes algunas formas de personalizar los boxplots utilizando la biblioteca Matplotlib:

1. Añadir etiquetas y títulos

Los títulos y etiquetas harán que tus gráficos sean más comprensibles para los espectadores, que podrán discernir rápidamente la comparación de los datos. Añadirlas es sencillo y puede hacerse utilizando las funciones de Matplotlib.

Para añadir etiquetas a un boxplot de Matplotlib:

plt.boxplot(data)
# Adds title
plt.title('Customized Boxplot Title')
# Adds x axis label
plt.xlabel('Customized X Label')
# Adds y axis label
plt.ylabel('Customized Y Label')
plt.show()

Esto creará un boxplot etiquetado como el de la imagen siguiente:

Título y etiquetas de boxplot personalizados en Matplotlib

2. Ajustar los colores de los gráficos de caja

Personalizar los colores y estilos de los gráficos de caja en Python permite una presentación visualmente atractiva y clara de los datos. También te ayudarán a destacar eficazmente puntos de datos específicos o comparaciones ante tus interlocutores.

Puedes cambiar los colores de las cajas, bigotes, tapas, medianas y volantes utilizando los parámetros boxprops, whiskerprops, capprops, medianprops, y flierprops.

Este es el ejemplo de código:

plt.boxplot(data, boxprops=dict(color='blue'), whiskerprops=dict(color='red'), capprops=dict(color='green'), medianprops=dict(color='orange'), flierprops=dict(markerfacecolor='red', marker='o'))
plt.show()

Esto creará diferentes colores para los componentes de tu boxplot en función de los parámetros que hayas establecido:

Boxplot personalizar colores en Matplotlib

3. Sumar la media y la desviación típica

Añade la media y la desviación típica al diagrama de caja para proporcionar más información estadística.

# Creates dataset
data1 = np.random.normal(0, 1, 100)
data2 = np.random.normal(1, 2, 100)
data3 = np.random.normal(2, 1.5, 100)
# Calculates the mean and standard deviations
mean = [np.mean(d) for d in data]
std_devs = [np.std(d) for d in data]
# Creates a boxplot
plt.boxplot(data, labels=['Data 1', 'Data 2', 'Data 3'])
# Adds mean as red dots
for i in range(len(mean)):
   plt.plot(i + 1, mean[i], 'ro')
# Adds standard deviations as error bars
for i in range(len(std_devs)):
   plt.errorbar(i + 1, mean[i], yerr=std_devs[i], fmt='o', color='red')
# Plots graph
plt.title('Boxplot with Means and Standard Deviations')
plt.xlabel('Dataset')
plt.ylabel('Value')
plt.show()

Aquí tienes el gráfico resultante:

Boxplot con media y DE en Matplotlib

4. Gráficos horizontales

Los gráficos de caja horizontales pueden hacer que la visualización de los datos sea más legible, especialmente cuando se trata de nombres de categorías largos.

Esto puede hacerse simplemente utilizando el parámetro de argumento vert de la función boxplot de Matplotlib.

# Creates horizontal boxplot
plt.boxplot(data,
            labels=['Data 1', 'Data 2', 'Data 3'], 
            vert=False)
# Plots graph
plt.title('Horizontal Boxplot')
plt.xlabel('Value')
plt.ylabel('Dataset')
plt.show()

Éste es el gráfico resultante de ejecutar el código anterior:

Boxplot horizontal en Matplotlib

Nuestro curso Introducción a la visualización de datos con Matplotlib también debería ayudarte a comprender mejor cómo crear visualizaciones de datos más allá de los gráficos de caja.

Si necesitas consultar esta información en el futuro, aquí tienes un resumen de trucos para trazar en Matplotlib:

Hoja de trucos Matplotlib

Seaborn, construido sobre Matplotlib, simplifica la creación de boxplots estéticamente agradables con un código mínimo. Su sencilla sintaxis la hace accesible para todos los niveles de conocimientos, y su integración con otras bibliotecas permite la máxima flexibilidad en el análisis de datos.

Aquí tienes una guía paso a paso para crear un boxplot básico con Seaborn. Como antes, empieza importando las bibliotecas necesarias.

# Imports necessary libraries
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

A continuación, vamos a preparar un conjunto de datos sencillo:

# Generates a random dataset
np.random.seed(10)
data = np.random.normal(0, 1, 100)

Por último, vamos a crear el boxplot real e imprimirlo:

# Creates a basic boxplot
sns.boxplot(data=data)
# Adds title to the boxplot
plt.title('Basic Boxplot') 
plt.show()

Éste es el gráfico resultante:

Boxplot básico de seaborn

Puedes personalizar tu gráfico Seaborn utilizando los parámetros hue, orient y palette

Veamos cómo añadir colores a tu boxplot en función de las categorías, utiliza el parámetro hue:

# Generate multiple datasets
data = {
    'Group': ['A']*100 + ['B']*100 + ['C']*100,
    'Value': np.concatenate([np.random.normal(0, 1, 100), 
                             np.random.normal(1, 2, 100), 
                             np.random.normal(2, 1.5, 100)])
}
df = pd.DataFrame(data)
# Create additional grouping data
df['Subgroup'] = np.random.choice(['X', 'Y'], size=300)
# Plots graph
sns.boxplot(x='Group', y='Value', data=df, hue='Subgroup', palette='Set2')
plt.title('Colored Boxplot')
plt.show()

Aquí tienes el boxplot modificado:

Boxplot de seaborn coloreado

Para alinear tu boxplot en una orientación determinada, utiliza el parámetro orient. Para la orientación vertical, el parámetro orient debe ajustarse a "v". Para la orientación horizontal, debe ajustarse a "h".

Aquí tienes el código para un boxplot horizontal:

# Plots horizontal boxplot
sns.boxplot(data=df, orient='h', palette='Set2')
plt.title('Colored Boxplot')
plt.show()

El código anterior creará un boxplot como éste:

Boxplot horizontal seaborno

Para añadir puntos de datos individuales al diagrama de caja, puedes utilizar un diagrama de enjambre utilizando la función swarmplot:

# Plots boxplot
sns.boxplot(x='Group', y='Value', data=df)
# Overlays swarm plot over boxplot
sns.swarmplot(x='Group', y='Value', data=df, color='black', alpha=0.5)
plt.title('Boxplot with Swarmplot')
plt.show()

El código anterior creará un boxplot como éste:

Boxplot con swarmplot

Un gráfico de enjambre como éste puede ayudarte a comprender mejor la distribución de tus datos. Complementa la información estadística de un diagrama de caja para ofrecer a tus espectadores una imagen completa de tus datos.

Consulta nuestro curso Introducción a la visualización de datos con Seaborn para conocer más formas de implementar visualizaciones de datos en Seaborn.

Si quieres consultar esta información en el futuro, aquí tienes una hoja de trucos para trazar en Seaborn:

Hoja de trucos Seaborn

Interpretar los resultados de los gráficos de caja de Python

La interpretación de un diagrama de caja depende del contexto y de la pregunta de investigación específica que aborde.

Sin embargo, algunas pautas generales pueden ayudar a comprender la distribución de los datos mostrada mediante el diagrama de caja. Entre ellas están:

  • La línea de la mediana indica el valor medio del conjunto de datos.
  • El rango intercuartílico (IQR) o 50% medio de los valores se sitúa entre el primer cuartil (Q1) y el tercer cuartil (Q3).
  • Los bigotes se extienden 1,5 veces por encima y por debajo de Q3 y Q1, respectivamente.
  • Los valores atípicos se representan individualmente con un punto o un asterisco.
  • La longitud de la caja y los bigotes dan una idea de la dispersión de los datos.
  • Las distribuciones sesgadas mostrarán asimetría en el tamaño de la caja y en su posición respecto a la línea mediana.
  • Los valores atípicos más de 1,5 veces por encima o por debajo de Q3 y Q1 pueden indicar valores extremos o posibles errores en la medición de los datos.

Errores comunes que debes evitar al crear gráficos de caja en Python

Aunque Python facilita la creación de gráficos de caja visualmente atractivos a partir de tus conjuntos de datos, hay que tener en cuenta algunos aspectos para evitar visualizaciones engañosas o incorrectas.

1. No tratar los valores perdidos

Al crear un boxplot en Python, los profesionales suelen pasar por alto la importancia del preprocesamiento de los datos, lo que conduce a resultados engañosos. 

Todas las visualizaciones de datos requieren algún tipo de limpieza antes de trazarlas. Los gráficos de caja no son una excepción y pueden mostrar valores perdidos como valores atípicos, lo que podría sesgar los resultados.

2. Escalado incorrecto de los datos

Además, a veces los usuarios no escalan los datos adecuadamente, lo que puede dar lugar a un boxplot sesgado que falsee las verdaderas características del conjunto de datos. El escalado garantiza que los rasgos contribuyan por igual al análisis.

3. No abordar los valores atípicos

Por último, los analistas pueden descuidar el examen y tratamiento exhaustivo de los valores atípicos antes de trazarlos. Un tratamiento inadecuado de los valores atípicos puede sesgar la interpretación, por lo que es crucial distinguir los valores atípicos auténticos de los errores o anomalías en la recogida de datos.

Intenta utilizar esta hoja de trucos cuando construyas visualizaciones de datos:

Hoja de trucos de visualización de datos

Reflexiones finales

Los gráficos de caja son una herramienta valiosa para visualizar distribuciones de datos y compararlas entre categorías. 

En Python, puedes utilizar Matplotlib, Seaborn o Plotly para crear boxplots rápidamente sin mucha codificación. DataCamp tiene cursos completos para cada una de estas herramientas:

¿Qué te parece explorar más sobre la visualización de datos utilizando Python? Entonces el curso de Visualización de Datos con Python te será de gran ayuda.

Preguntas frecuentes

¿Se pueden utilizar gráficos de caja para datos no numéricos?

No, los gráficos de caja están diseñados explícitamente para datos numéricos. Representan la distribución de un conjunto de datos basándose en un resumen de cinco números (mínimo, primer cuartil, mediana, tercer cuartil y máximo), que requiere valores numéricos. Para los datos no numéricos, son más apropiadas otras técnicas de visualización, como los diagramas de barras o los gráficos circulares.

¿Cómo puedo interpretar la presencia de múltiples valores atípicos en un diagrama de caja?

Los valores atípicos múltiples en un diagrama de caja indican varios puntos de datos significativamente diferentes del resto del conjunto de datos. Esto podría sugerir la presencia de variabilidad u observaciones inusuales que podrían requerir más investigación. Los valores atípicos pueden deberse a errores en la recogida de datos, a variaciones naturales o a diferencias significativas en subgrupos dentro de los datos.

¿Puedo utilizar gráficos de caja para comparar la distribución de datos en varias categorías?

Sí, los gráficos de caja son excelentes para comparar distribuciones de varias categorías. Puedes colocar gráficos de caja uno al lado del otro para diferentes categorías con el fin de comparar sus medianas, rangos intercuartílicos y la presencia de valores atípicos. Esto puede ayudar a identificar diferencias y similitudes en las distribuciones de varios grupos.

¿Cuáles son los errores más comunes que hay que evitar al interpretar gráficos de caja?

Al interpretar gráficos de caja, evita los siguientes errores:

  • Ignorar el contexto de los valores atípicos: Los valores atípicos no siempre indican errores, pero pueden ser variaciones significativas.
  • Interpretar erróneamente la mediana como la media: La mediana es el valor medio, no la media, y se ve menos afectada por los valores atípicos.
  • Pasar por alto la importancia del tamaño de la muestra: Las muestras pequeñas pueden dar lugar a gráficos de caja engañosos. Asegúrate de que el tamaño de tus datos es suficiente para una interpretación fiable.

¿Cómo puedo crear gráficos de caja interactivos en Python?

Para crear boxplots interactivos en Python, puedes utilizar bibliotecas como Plotly o Bokeh. Estas bibliotecas te permiten añadir interactividad a tus visualizaciones, como información sobre herramientas, zoom y desplazamiento.

Temas

¡Aprende más sobre Python y la visualización de datos con estos cursos!

curso

Introduction to Data Visualization with Matplotlib

4 hr
193.4K
Learn how to create, customize, and share data visualizations using Matplotlib.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

tutorial

Python Seaborn Tutorial Para Principiantes: Empezar a visualizar datos

Este tutorial de Seaborn le introduce en los fundamentos de la visualización de datos estadísticos
Moez Ali's photo

Moez Ali

20 min

tutorial

Introducción al trazado con Matplotlib en Python

Este tutorial muestra cómo utilizar Matplotlib, una potente biblioteca de visualización de datos en Python, para crear gráficos de líneas, barras y dispersión con datos bursátiles.

Kevin Babitz

25 min

tutorial

Tutorial de Python Seaborn Line Plot: Crear visualizaciones de datos

Descubra cómo utilizar Seaborn, una popular biblioteca de visualización de datos de Python, para crear y personalizar gráficos de líneas en Python.
Elena Kosourova's photo

Elena Kosourova

12 min

tutorial

Gráficos lineales en MatplotLib con Python

Este tutorial práctico profundiza en la creación y personalización de gráficos lineales con Matplotlib, una potente biblioteca de visualización de datos en Python.
Arunn Thevapalan's photo

Arunn Thevapalan

11 min

tutorial

Histogramas en Matplotlib

Aprende sobre histogramas y cómo puedes utilizarlos para obtener información de los datos con la ayuda de matplotlib.
Aditya Sharma's photo

Aditya Sharma

8 min

tutorial

Tipos de gráficos de datos y cómo crearlos en Python

Explore varios tipos de gráficos de datos, desde los más comunes hasta los más avanzados y poco convencionales, qué muestran, cuándo utilizarlos, cuándo evitarlos y cómo crearlos y personalizarlos en Python.
Elena Kosourova's photo

Elena Kosourova

21 min

See MoreSee More