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>
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>
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>
sns.pairplot(data=df, hue="file_name")
<seaborn.axisgrid.PairGrid at 0x2504a5fba60>
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>
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