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'>
../_images/ef77a01adaa5c5887770a0a98f71164d6620643aa593ca6bf55edbdfd7b50d1a.png

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>
../_images/d0ce25765ccd86b0241683da191a9c0bcdbe80e78664dfa812569071361af1f2.png

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>
../_images/9274917e3ee7b0c960318ae80f6988c4c99a917678a0f03cdfba37fd5323d30d.png

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'>
../_images/7ce39dc708a5046c5f7cbba2d8cb2aad51d385670a372a6e7b7fc4fa246a55bd.png

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'>
../_images/7050b3f1cafd17da2e1bfa96497351c411ab7fc4490ccbaca39decac64afb868.png

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>
../_images/c29cb3f2d77132bfcb047fab8e390e2c0ac229b4cadf9294ccad160db8357a37.png

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