Introducción a Seaborn#

Seaborn es una biblioteca para crear gráficos estadísticos en Python. Se basa en matplotlib y se integra estrechamente con las estructuras de datos de pandas.

import seaborn as sns

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

Gráficos de dispersión con seaborn#

Comenzamos cargando una tabla de mediciones en un dataframe df.

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

A partir de esta tabla podemos hacer un gráfico de dispersión de la relación de aspecto frente a la intensidad media.

sns.scatterplot(data=df, x="aspect_ratio", y="intensity_mean")
<AxesSubplot: xlabel='aspect_ratio', ylabel='intensity_mean'>
../_images/1c6c2e79ba521336f9e62358c8c6c9d4076f798ebf70d8ee8072f08e476dc7d7.png

Podemos incorporar y visualizar otras características proporcionando algunos argumentos adicionales, por ejemplo, podemos usar la medición del área para codificar el tamaño de los puntos de datos y la longitud del eje mayor se puede usar para visualizar los puntos de datos en diferentes colores del mapa de colores magma.

sns.scatterplot(data=df,
            x = "aspect_ratio",
            y = "intensity_mean",
            size = "area",
            hue = "major_axis_length",
            palette = 'magma')
<AxesSubplot: xlabel='aspect_ratio', ylabel='intensity_mean'>
../_images/17600232c00ff8cb90bc9b89e6cda53796661d3c0ddf042d45614e4fea4dff4b.png

La función scatterplot es una función a nivel de ejes. Esto significa que, si queremos añadir subgráficos, también necesitamos crear primero una figura y ejes de matplotlib y pasar los manejadores de ejes.

Gráficos de dispersión con subgráficos#

Seaborn también tiene funciones a nivel de figura, donde los subgráficos son un argumento.

En el ejemplo siguiente, usamos la función relplot (de relationship) y separamos los archivos proporcionando ‘file_name’ al argumento col. Esto nos permite ver las mediciones separadas por el archivo de imagen del que se tomaron las mediciones.

sns.relplot(data=df,
            x = "aspect_ratio",
            y = "intensity_mean",
            size = "area",
            hue = "major_axis_length",
            col = "file_name",
            palette = 'magma')
<seaborn.axisgrid.FacetGrid at 0x148dd2d2be0>
../_images/48f149f0c185d0ce6743bf7dac15b14e1df98b575d1545a0d987f1b24b7566e2.png