Vistas multivariadas#

En este notebook, mostramos algunos ejemplos de cómo tener gráficos de diferentes tipos en una figura, como tener un gráfico de dispersión con distribuciones marginales o incluso un gráfico multivariado con relaciones de pares de todas las propiedades en una tabla.

Debido a que estos gráficos implican manejar subgráficos, todos son funciones a nivel de figura.

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

Empezamos 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

Graficando distribuciones conjuntas y marginales#

Para tener una distribución conjunta de dos variables con las distribuciones marginales en los lados, podemos usar jointplot.

sns.jointplot(data=df, x="aspect_ratio", y="area")
<seaborn.axisgrid.JointGrid at 0x250479ad070>
../_images/e316f02c0fda494cf9fe2566d2cacbf5ee40b1b66c4f3f47948e12c55222d17f.png

Es posible separar grupos pasando una propiedad categórica al argumento hue. Esto tiene un efecto en la distribución marginal, convirtiéndolas de histogramas a gráficos kde.

sns.jointplot(data=df, x="aspect_ratio", y="area", hue = 'file_name')
<seaborn.axisgrid.JointGrid at 0x250479c9d90>
../_images/d040ee1b6c532bdb4ee490749079e37a86a0c5425e4b0d19e016a39399aaa720.png

Graficando muchas distribuciones a la vez#

Los ejemplos anteriores mostraban un gráfico con la relación entre dos propiedades. Esto se puede expandir aún más con la función pairplot

sns.pairplot(data=df)
<seaborn.axisgrid.PairGrid at 0x2504805e730>
../_images/12bc0e22590ffd1a5fc3df71fb49660a04996d76cf90049e783d36c034a2764b.png
sns.pairplot(data=df, hue="file_name")
<seaborn.axisgrid.PairGrid at 0x2504a5fba60>
../_images/c9dc8877e3fcd1a782ebdf7a87b078ec859ecf3375eb1901392f07be67b1d73a.png

Si tienes demasiados puntos, mostrar cada punto individual puede resultar en gráficos demasiado saturados. Una visualización alternativa en este caso podría ser un gráfico de histograma 2D. Podemos hacer esto cambiando el argumento kind a “hist”.

sns.pairplot(data=df, hue="file_name", kind = "hist")
<seaborn.axisgrid.PairGrid at 0x2504a613e50>
../_images/ca7cc54c099a3ec78b0af3f3f63269f64b93ae2bdebd685e8df46845b3b9ffeb.png

Ejercicio#

Es posible que hayas notado que el pairplot es redundante en algunos gráficos porque la diagonal superior muestra las mismas relaciones rotadas.

Vuelve a dibujar el pairplot para mostrar solo la diagonal inferior de los gráficos.

Pista: explora las propiedades de pairplot