Box plot (gráfico de cajas) en matplotlib

La función boxplot en matplotlib

Al usar matplotlib puedes utilizar la función boxplot para crear un gráfico de cajas en Python. Ten en cuenta que para hacer los ejemplos reproducibles hemos fijado una semilla y generado una variable llamada x basada en una distribución normal.

import numpy as np
import matplotlib.pyplot as plt

# Semilla para reproducibilidad
np.random.seed(5)

# Simulación de datos
x = np.random.normal(0, 1, 200)

# Gráfico
fig, ax = plt.subplots()
ax.boxplot(x)
# plt.show()

Box plot por defecto en matplotlib plt

Gráfico de cajas horizontal

La función boxplot proporciona varios argumentos para personalizar el gráfico de cajas por defecto. Si quieres crear un box plot horizontal en lugar de vertical puedes establecer el argumento vert como False.

import numpy as np
import matplotlib.pyplot as plt

# Semilla para reproducibilidad
np.random.seed(5)

# Simulación de datos
x = np.random.normal(0, 1, 200)

# Box plot horizontal
fig, ax = plt.subplots()
ax.boxplot(x, vert = False)
# plt.show()

Box plot horizontal en matplotlib

Intervalo de confianza para la mediana (notch)

Si quieres mostrar el intervalo de confianza al 95% para la mediana puedes establecer notch = True, ya que el intervalo se mostrará con muescas ( notch, en inglés) sobre la caja.

import numpy as np
import matplotlib.pyplot as plt

# Semilla para reproducibilidad
np.random.seed(5)

# Simulación de datos
x = np.random.normal(0, 1, 200)

# Box plot con intervalos de confianza
fig, ax = plt.subplots()
ax.boxplot(x, notch = True)
# plt.show()

Box plot con notch (intervalo de confianza) en Python

Símbolo de los atípicos

El símbolo por defecto para representar los outliers (datos atípicos) son círculos. Sin embargo, puedes personalizar el marcador y su color pasando un diccionario al argumento flierprops, tal y como se muestra a continuación.

import numpy as np
import matplotlib.pyplot as plt

# Semilla para reproducibilidad
np.random.seed(5)

# Simulación de datos
x = np.random.normal(0, 1, 200)

# Box plot
fig, ax = plt.subplots()
ax.boxplot(x, flierprops = dict(marker = "s", markerfacecolor = "red"))
# plt.show()

Cambiar el estilo de los outliers o atípicos de un box plot en matplotlib

Box plot con la media

La línea central de un box plot es, por lo general, la mediana de los datos. Sin embargo, si estableces el argumento showmeans como True se representará también con un triángulo verde, y si además estableces meanline = True la media se representará con una línea verde por defecto.

import numpy as np
import matplotlib.pyplot as plt

# Semilla para reproducibilidad
np.random.seed(5)

# Simulación de datos
x = np.random.normal(0, 1, 200)

# Box plot con la media
fig, ax = plt.subplots()
ax.boxplot(x, showmeans = True, meanline = True)
# plt.show()

Box plot con la media en Python

Eliminar outliers

Si quieres que los atípicos no aparezcan en el gráfico, puedes establecer el argumento showfliers como False.

import numpy as np
import matplotlib.pyplot as plt

# Semilla para reproducibilidad
np.random.seed(5)

# Simulación de datos
x = np.random.normal(0, 1, 200)

# Box plot sin outliers
fig, ax = plt.subplots()
ax.boxplot(x, showfliers = False)
# plt.show()

Eliminar los outliers de un box plot en Python

Personalización del color

Color de fondo

El color de las cajas de un gráfico de cajas hecho con matplotlib es por defecto blanco, pero puedes sobrescribirlo estableciendo patch_artist = True y pasando un diccionario con facecolor al argumento boxprops, tal y como se muestra en el siguiente bloque de código.

Color de fondo de un box plot en matplotlib

import numpy as np
import matplotlib.pyplot as plt

# Semilla para reproducibilidad
np.random.seed(5)

# Simulación de datos
x = np.random.normal(0, 1, 200)

# Box plot with notch
fig, ax = plt.subplots()
ax.boxplot(x,
           patch_artist = True,
           boxprops = dict(facecolor = "lightblue"))
# plt.show()

Si no estableces patch_artist = True obtendrás el siguiente error: “AttributeError: ‘Line2D’ object has no property ‘facecolor’”

Color de la mediana

El color por defecto de la línea que representa la mediana es naranja, pero puedes cambiarlo pasando un diccionario a medianprops. Ten en cuenta que también puedes modificar el grosor de la línea de esta forma.

Median line color of the matplotlib boxplot function

import numpy as np
import matplotlib.pyplot as plt

# Semilla para reproducibilidad
np.random.seed(5)

# Simulación de datos
x = np.random.normal(0, 1, 200)

# Box plot
fig, ax = plt.subplots()
plt.boxplot(x, medianprops = dict(color = "green", linewidth = 1.5))
# plt.show()

Color de los bigotes

También puedes personalizar el color de los bigotes (líneas que salen de las cajas) del box plot. Para ello tan solo tienes que pasar un diccionario con un color a whiskerprops.

Personalizar el color de los whiskers en matplotlib

import numpy as np
import matplotlib.pyplot as plt

# Semilla para reproducibilidad
np.random.seed(5)

# Simulación de datos
x = np.random.normal(0, 1, 200)

# Box plot
fig, ax = plt.subplots()
plt.boxplot(x, whiskerprops = dict(color = "red", linewidth = 2))
# plt.show()

Color de las barras de los bigotes

Por último, también es posible cambiar el color de las barras finales de los bigotes con capprops.

El argumento capprops en matplotlib

import numpy as np
import matplotlib.pyplot as plt

# Semilla para reproducibilidad
np.random.seed(5)

# Simulación de datos
x = np.random.normal(0, 1, 200)

# Box plot
fig, ax = plt.subplots()
plt.boxplot(x, capprops = dict(color = "red", linewidth = 2))
# plt.show()
Data Sketches

A journey of imagination, exploration, and beautiful data visualizations

Comprar en Amazon
Fundamentals of Data Visualization

A Primer on Making Informative and Compelling Figures

Comprar en Amazon

También te puede interesar