¿Qué es el diagrama de caja?
Un diagrama de caja es una forma de visualizar la distribución de los datos mediante el uso de un cuadro y algunas líneas verticales. Se conoce como el diagrama de los bigotes. Los datos se pueden distribuir en cinco rangos clave, que son los siguientes:
Aquí el IQR representa el Rango intercuartil que comienza desde el primer cuartil (Q1) y termina en el tercer cuartil (Q3).
Visualización del diagrama de caja
En el diagrama de caja, los puntos que están fuera de rango se denominan valores atípicos. Podemos crear el diagrama de caja de los datos para determinar lo siguiente:
- El número de valores atípicos en un conjunto de datos.
- ¿Los datos están sesgados o no?
- El rango de los datos.
El rango de datos del mínimo al máximo se denomina límite de bigotes. En Python, usaremos el módulo pyplot del módulo matplotlib, que tiene una función incorporada llamada boxplot() que puede crear el diagrama de caja de cualquier conjunto de datos.
Sintaxis:
matplotlib.pyplot.boxplot(data,notch=none,vert=none,patch_artist,widths=none)
En la función boxplot(), tenemos muchos atributos que se pueden usar para crear un diagrama de caja más atractivo y sorprendente del conjunto de datos.
Ejemplo 1:
Crearemos el conjunto de datos aleatorios de la matriz numpy y crearemos el diagrama de caja.
import matplotlib.pyplot as plt import numpy as np np.random.seed(15) dataSet = np.random.normal(100, 25, 200) print(dataSet) figure = plt.figure(figsize =(10, 8)) plt.boxplot(dataSet) plt.show()
Producción:
Explicación:
En el código anterior, en primer lugar, hemos importado las bibliotecas numpy y matplotlib en el código. Luego creamos el conjunto de datos aleatorio y trazamos el diagrama de caja usando la función boxplot().
np.ceros
Ejemplo2:
Podemos crear múltiples diagramas de caja simultáneamente en el mismo archivo.
import matplotlib.pyplot as plt import numpy as np np.random.seed(10) dataSet1 = np.random.normal(100, 10, 220) dataSet2 = np.random.normal(80, 20, 200) dataSet3 = np.random.normal(60, 35, 220) dataSet4 = np.random.normal(50, 40, 200) dataSet = [dataSet1, dataSet2, dataSet3, dataSet4] figure = plt.figure(figsize =(10, 7)) ax = figure.add_axes([0, 0, 1, 1]) bp = ax.boxplot(dataSet) plt.show()
Producción:
Explicación:
En el código anterior, tenemos cuatro conjuntos de datos que utilizan métodos aleatorios de numpy. Luego hemos creado la lista de los cuatro conjuntos de datos y utilizamos esta función interna boxplot().
Ejemplo 3:
Podemos usar algunos atributos de la función boxplot() para personalizar el gráfico.
import matplotlib.pyplot as plt import numpy as np np.random.seed(10) dataSet1 = np.random.normal(100, 10, 220) dataSet2 = np.random.normal(80, 20, 200) dataSet3 = np.random.normal(60, 35, 220) dataSet4 = np.random.normal(50, 40, 200) dataSet = [dataSet1, dataSet2, dataSet3, dataSet4] figure = plt.figure(figsize =(10, 7)) ax = figure.add_subplot(111) bp = ax.boxplot(dataSet, patch_artist = True,notch ='True', vert = 0) colors = ['#00FF00','#0F00FF', '#F00FF0','#FFFF0F'] for patch, color in zip(bp['boxes'], colors): patch.set_facecolor(color) for whisker in bp['whiskers']: whisker.set(color ='#8E008B',linewidth = 1.4,linestyle =':') for cap in bp['caps']: cap.set(color ='#8E008B',linewidth = 2.1) for median in bp['medians']: median.set(color ='blue',linewidth = 3) for flier in bp['fliers']: flier.set(marker ='D',color ='#d7298c',alpha = 0.6) ax.set_yticklabels(['dataSet1', 'dataSet2','dataSet3', 'dataSet4']) plt.title('Customized box plot using attributes') ax.get_xaxis().tick_bottom() ax.get_yaxis().tick_left() plt.show()
Producción:
Explicación:
En el código anterior, creamos los cuatro conjuntos de datos utilizando funciones aleatorias y los configuramos en una lista. Ahora hemos configurado los diferentes colores para cada diagrama de caja usando la lista de colores y usando la función set_facecolor().
Hemos establecido el ancho de línea de cada diagrama de caja y también configuramos las etiquetas para cada diagrama de caja. Hemos establecido el atributo vert =0, lo que significa que todos los gráficos estarán en modo horizontal.