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()
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()
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()
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()
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()
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()
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.
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.
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
.
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
.
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()
También te puede interesar