Graficando Distribuciones con Seaborn#
Con Seaborn, también es muy práctico graficar distribuciones de datos como diagramas de caja, gráficos de barras, histogramas y gráficos de estimación de densidad kernel.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
Comenzamos cargando una tabla de mediciones en un DataFrame de pandas.
df = pd.read_csv("../../data/BBBC007_analysis.csv")
df
| area | intensity_mean | major_axis_length | minor_axis_length | aspect_ratio | file_name | |
|---|---|---|---|---|---|---|
| 0 | 139 | 96.546763 | 17.504104 | 10.292770 | 1.700621 | 20P1_POS0010_D_1UL |
| 1 | 360 | 86.613889 | 35.746808 | 14.983124 | 2.385805 | 20P1_POS0010_D_1UL |
| 2 | 43 | 91.488372 | 12.967884 | 4.351573 | 2.980045 | 20P1_POS0010_D_1UL |
| 3 | 140 | 73.742857 | 18.940508 | 10.314404 | 1.836316 | 20P1_POS0010_D_1UL |
| 4 | 144 | 89.375000 | 13.639308 | 13.458532 | 1.013432 | 20P1_POS0010_D_1UL |
| ... | ... | ... | ... | ... | ... | ... |
| 106 | 305 | 88.252459 | 20.226532 | 19.244210 | 1.051045 | 20P1_POS0007_D_1UL |
| 107 | 593 | 89.905565 | 36.508370 | 21.365394 | 1.708762 | 20P1_POS0007_D_1UL |
| 108 | 289 | 106.851211 | 20.427809 | 18.221452 | 1.121086 | 20P1_POS0007_D_1UL |
| 109 | 277 | 100.664260 | 20.307965 | 17.432920 | 1.164920 | 20P1_POS0007_D_1UL |
| 110 | 46 | 70.869565 | 11.648895 | 5.298003 | 2.198733 | 20P1_POS0007_D_1UL |
111 rows × 6 columns
Diagramas de Caja#
La función de ejes para graficar diagramas de caja es boxplot.
Seaborn ya identificó file_name como un valor categórico e intensity_mean como un valor numérico. Por lo tanto, grafica diagramas de caja para la variable de intensidad. Si invertimos x e y, seguimos obteniendo el mismo gráfico, pero como diagramas de caja verticales.
sns.boxplot(data=df, x="intensity_mean", y="file_name")
<AxesSubplot: xlabel='intensity_mean', ylabel='file_name'>
La versión a nivel de figura, y más general, de este tipo de gráfico es catplot. Solo tenemos que proporcionar kind como box.
sns.catplot(data=df, x="intensity_mean", y="file_name", kind="box")
<seaborn.axisgrid.FacetGrid at 0x27775d754f0>
Hay otros tipos disponibles, como un gráfico de bar.
sns.catplot(data=df, x="file_name", y="intensity_mean", kind="bar")
<seaborn.axisgrid.FacetGrid at 0x2777b1abb80>
Histogramas y Gráficos de Distribución#
La función a nivel de ejes para graficar histogramas es histplot.
sns.histplot(data = df, x="intensity_mean", hue="file_name")
<AxesSubplot: xlabel='intensity_mean', ylabel='Count'>
En su lugar, podemos graficar la estimación de densidad kernel (kde) con la función kdeplot. Solo ten cuidado al interpretar estos gráficos (revisa algunos problemas aquí)
sns.kdeplot(data=df, x="intensity_mean", hue="file_name")
<AxesSubplot: xlabel='intensity_mean', ylabel='Density'>
La función a nivel de figura para distribuciones es distplot. Con ella, puedes tener histogramas y kde en el mismo gráfico, u otros tipos de gráficos, como la función de distribución acumulativa empírica (ecdf).
sns.displot(data = df, x="intensity_mean", hue="file_name", kde=True)
<seaborn.axisgrid.FacetGrid at 0x2777b77c910>
Ejercicio#
Grafica dos funciones de distribución acumulativa empíricas para ‘area’ de diferentes archivos en un mismo gráfico con diferentes colores.
Repite esto para la propiedad ‘intensity_mean’ en una segunda figura. Infiere si esperarías que estas propiedades sean diferentes o no.
*Pista: busca el parámetro kind de displot