Seaborn

Tutorial Seaborn: Grids Multiplot en Seaborn

Seaborn: Aprende a utilizar Grids Multiplot para crear y personalizar cuadrículas de gráficos. Domina FacetGrid y PairGrid para visualizar datos complejos de forma efectiva.

Aprende Seaborn GRATIS y certifícate

¿Cuándo usar múltiples plots en un gráfico?

En el análisis de datos, es frecuente encontrarse con conjuntos de información que requieren una exploración detallada desde diferentes perspectivas. Utilizar múltiples plots en un gráfico es especialmente útil cuando queremos comparar subgrupos dentro de un conjunto de datos o visualizar relaciones entre variables en distintas condiciones. Este enfoque nos permite identificar patrones y tendencias que podrían pasar desapercibidos en una sola visualización.

Por ejemplo, si estamos analizando datos de ventas en diferentes regiones y queremos comparar el rendimiento entre ellas, es práctico representar cada región en subplots separados dentro del mismo gráfico. Esto facilita la comparación directa y el contraste de las tendencias entre los distintos subgrupos.

Las situaciones en las que es recomendable usar múltiples plots incluyen:

  • Segmentación por categorías: Cuando deseamos observar cómo se comporta una variable numérica dentro de las diferentes categorías de una variable categórica. Por ejemplo, analizar la distribución de ingresos por grupos de edad.
  • Análisis de interacciones: Si necesitamos explorar cómo interactúan dos variables en diferentes niveles de una tercera variable. Esto es común en estudios donde factores como el tiempo o la ubicación influyen en la relación entre variables.
  • Visualización de datos multivariados: Al manejar datasets con múltiples variables, los múltiples plots permiten visualizar combinaciones de variables para detectar correlaciones o patrones específicos.

Veamos un ejemplo práctico utilizando Seaborn:

import seaborn as sns
import matplotlib.pyplot as plt

# Cargar un conjunto de datos de ejemplo
diamonds = sns.load_dataset("diamonds")

# Crear una cuadrícula de plots segmentada por corte y color de diamante
g = sns.FacetGrid(diamonds, col="cut", row="color", margin_titles=True)
g.map(sns.histplot, "price")
plt.show()

En este código, utilizamos el conjunto de datos de diamantes y creamos una cuadrícula de histogramas del precio de los diamantes, segmentados por las categorías de corte y color. Esto nos ayuda a visualizar cómo varía el precio según estas dos características, proporcionando una visión detallada del comportamiento del mercado.

Otro caso donde los múltiples plots son útiles es al analizar relaciones entre pares de variables en diferentes subgrupos. Por ejemplo:

# Cargar datos sobre ejercicios físicos
exercise = sns.load_dataset("exercise")

# Crear una cuadrícula de plots para visualizar la relación entre pulso y tiempo, segmentada por tipo de ejercicio
g = sns.FacetGrid(exercise, col="kind")
g.map(sns.scatterplot, "time", "pulse")
plt.show()

Aquí estamos examinando cómo cambia el pulso en función del tiempo para diferentes tipos de ejercicio. Al separar los plots por el tipo de actividad, podemos comparar cómo cada ejercicio afecta al ritmo cardíaco a lo largo del tiempo.

Es importante considerar que, aunque los múltiples plots ofrecen una gran cantidad de información, debemos evitar sobrecargar la visualización. La legibilidad y claridad son fundamentales para que los insights sean fácilmente interpretables. Por ello, es recomendable limitar el número de subplots y organizar la información de manera coherente.

Utilizar múltiples plots en un gráfico es beneficioso cuando queremos:

  • Comparar y contrastar subgrupos dentro de nuestros datos.
  • Analizar relaciones entre variables en diferentes condiciones o categorías.
  • Identificar patrones específicos que pueden estar ocultos en una visualización general.

FacetGrid

El objeto FacetGrid de Seaborn es una herramienta que permite crear una matriz de gráficas basadas en la partición de un conjunto de datos según una o más variables categóricas. Esto es especialmente útil para visualizar relaciones complejas y explorar patrones entre subgrupos de datos.

Para utilizar FacetGrid, primero debemos importar Seaborn y cargar un conjunto de datos adecuado. Por ejemplo:

import seaborn as sns
import matplotlib.pyplot as plt

# Cargar un conjunto de datos de ejemplo
tips = sns.load_dataset("tips")

Una vez cargados los datos, podemos crear una cuadrícula de facetas utilizando variables categóricas para definir las filas y columnas. Por ejemplo, si queremos segmentar por el día y el momento de la comida, podemos hacer lo siguiente:

# Crear una cuadrícula de facetas segmentada por día y momento
g = sns.FacetGrid(tips, col="day", row="time")

En este código, col y row especifican las variables categóricas que definen las columnas y las filas de la cuadrícula, respectivamente. El siguiente paso es mapear una función de visualización a esta cuadrícula para representar los datos. Por ejemplo, podemos utilizar un histograma para visualizar la distribución de las propinas:

# Mapear un histograma de la columna 'tip' en la cuadrícula
g.map(sns.histplot, "tip")
plt.show()

El método map aplica la función de visualización especificada a cada subconjunto de datos en las facetas de la cuadrícula. En este caso, crea un histograma de las propinas para cada combinación de día y momento.

Además de map, podemos utilizar map_dataframe si deseamos pasar DataFrames o utilizar funciones que requieran más argumentos. Por ejemplo:

# Utilizar map_dataframe para añadir más argumentos
g.map_dataframe(sns.scatterplot, x="total_bill", y="tip")
plt.show()

Aquí, estamos utilizando un scatterplot para visualizar la relación entre el total de la cuenta y la propina en cada faceta. Esto nos permite observar cómo varía esta relación en función del día y el momento.

Es posible añadir una variable adicional utilizando el argumento hue, que divide los datos dentro de cada faceta en subgrupos adicionales. Por ejemplo:

# Añadir una variable 'sex' como hue
g = sns.FacetGrid(tips, col="day", row="time", hue="sex")
g.map(sns.scatterplot, "total_bill", "tip")
g.add_legend()
plt.show()

En este caso, la variable sex se utiliza para diferenciar los puntos dentro de cada gráfica, añadiendo un nivel adicional de detalle a la visualización. Es importante utilizar add_legend() para añadir la leyenda correspondiente.

También podemos controlar aspectos estéticos de la cuadrícula, como el tamaño de las figuras y el espacio entre ellas. Por ejemplo:

# Ajustar el tamaño y el espacio entre las facetas
g = sns.FacetGrid(tips, col="day", row="time", height=3, aspect=1)
g.map(sns.histplot, "tip")
plt.subplots_adjust(hspace=0.4, wspace=0.4)
plt.show()

Aquí, los parámetros height y aspect controlan el tamaño de cada faceta, mientras que plt.subplots_adjust ajusta el espacio horizontal y vertical entre ellas.

El uso de FacetGrid es especialmente útil para analizar patrones y relaciones en datos multidimensionales. Al dividir los datos en facetas basadas en variables categóricas, es más sencillo comparar y contrastar diferentes subgrupos.

También es posible personalizar aún más las facetas, añadiendo títulos, etiquetas y modificando escalas. Por ejemplo:

# Añadir títulos y ajustar escalas
g = sns.FacetGrid(tips, col="day", row="time", margin_titles=True)
g.map(sns.histplot, "tip")
g.set_axis_labels("Propina", "Frecuencia")
g.set_titles(col_template="{col_name}", row_template="{row_name}")
plt.show()

El argumento margin_titles coloca los títulos de las facetas en los márgenes, lo que mejora la legibilidad cuando hay muchas gráficas. Los métodos set_axis_labels y set_titles permiten personalizar las etiquetas de los ejes y los títulos de cada faceta.

FacetGrid es una herramienta versátil para crear visualizaciones múltiples que facilitan el análisis de datos complejos. Al aprovechar las capacidades de Seaborn, podemos crear gráficas informativas que nos ayudan a comprender mejor nuestros conjuntos de datos.

PairGrid

El objeto PairGrid de Seaborn es una herramienta avanzada para visualizar relaciones bivariadas entre pares de variables en conjuntos de datos multivariados. A diferencia de funciones de nivel superior como pairplot, PairGrid ofrece un control detallado sobre cada aspecto de la cuadrícula de gráficas, permitiendo personalizar tipos de gráficos, estéticas y funciones de mapeo.

Para comenzar a utilizar PairGrid, importamos las bibliotecas necesarias y cargamos un conjunto de datos relevante, como el famoso conjunto de datos iris:

import seaborn as sns
import matplotlib.pyplot as plt

# Cargar el conjunto de datos 'iris'
iris = sns.load_dataset("iris")

Creamos una instancia de PairGrid pasando el DataFrame y, opcionalmente, especificando las variables que queremos incluir:

# Crear una instancia de PairGrid
g = sns.PairGrid(iris)

Con la instancia creada, podemos mapear funciones de visualización a diferentes partes de la cuadrícula. Por ejemplo, podemos mostrar histogramas en la diagonal y diagramas de dispersión en las posiciones fuera de la diagonal:

# Mapear histogramas en la diagonal
g.map_diag(sns.histplot, color="skyblue")

# Mapear scatterplots en posiciones fuera de la diagonal
g.map_offdiag(sns.scatterplot, color="darkblue")
plt.show()

En este caso, map_diag aplica histplot a la diagonal de la cuadrícula, mostrando la distribución de cada variable individualmente. El método map_offdiag aplica scatterplot a las posiciones fuera de la diagonal, visualizando las relaciones entre pares de variables.

Para agregar una dimensión adicional, podemos utilizar el argumento hue al crear la instancia de PairGrid, lo que nos permite diferenciar los datos por categorías:

# Crear PairGrid diferenciando por especie
g = sns.PairGrid(iris, hue="species")

# Mapear funciones de visualización
g.map_diag(sns.kdeplot)
g.map_offdiag(sns.scatterplot)

# Añadir leyenda
g.add_legend()
plt.show()

Aquí, la variable categórica species se utiliza para colorear los gráficos según la especie de iris, facilitando la identificación de patrones específicos para cada categoría. El método add_legend añade una leyenda al gráfico para interpretar los colores asociados a cada categoría.

La flexibilidad de PairGrid nos permite personalizar aún más los gráficos. Podemos utilizar diferentes tipos de gráficos en distintas partes de la cuadrícula. Por ejemplo, podemos reemplazar los histogramas de la diagonal por gráficos de violín para visualizar la distribución y densidad de los datos:

# Usar violinplot en la diagonal
g = sns.PairGrid(iris, hue="species")
g.map_diag(sns.violinplot)

# Mantener scatterplots fuera de la diagonal
g.map_offdiag(sns.scatterplot)

# Añadir leyenda
g.add_legend()
plt.show()

En este ejemplo, los violinplots proporcionan información sobre la distribución de las variables, mostrando la densidad y posibles multimodalidades en los datos.

También podemos personalizar las propiedades estéticas de los gráficos utilizando argumentos adicionales. Por ejemplo, podemos ajustar el tamaño de los puntos en los scatterplots y añadir líneas de ajuste utilizando sns.regplot:

# Mapear regplot fuera de la diagonal con ajustes personalizados
g = sns.PairGrid(iris, hue="species")
g.map_diag(sns.histplot)
g.map_offdiag(sns.regplot, scatter_kws={"s": 20}, line_kws={"color": "red"})
g.add_legend()
plt.show()

Aquí, scatter_kws y line_kws nos permiten personalizar el tamaño de los puntos y el color de las líneas de regresión respectivamente. El uso de regplot añade una línea de regresión, lo que ayuda a identificar tendencias lineales entre las variables.

Si deseamos enfocarnos sólo en una parte de la cuadrícula para evitar redundancias, podemos utilizar el argumento corner=True al crear la instancia de PairGrid, lo que mostrará únicamente la parte inferior de la matriz:

# Crear PairGrid mostrando sólo la esquina inferior
g = sns.PairGrid(iris, hue="species", corner=True)
g.map_lower(sns.scatterplot)
g.map_diag(sns.histplot)
g.add_legend()
plt.show()

Esto mejora la claridad visual al reducir el número de gráficos mostrados, manteniendo la información necesaria para el análisis.

Además, PairGrid permite aplicar funciones personalizadas a los datos. Por ejemplo, podemos definir una función que calcule y muestre el coeficiente de correlación entre las variables:

# Definir función personalizada para mostrar correlación
def corrfunc(x, y, **kws):
    coef = x.corr(y)
    ax = plt.gca()
    ax.annotate(f"r = {coef:.2f}", xy=(0.1, 0.9), xycoords=ax.transAxes)

# Aplicar función personalizada fuera de la diagonal
g = sns.PairGrid(iris)
g.map_offdiag(corrfunc)
g.map_diag(sns.histplot)
plt.show()

La función corrfunc calcula el coeficiente de correlación de Pearson y lo muestra en cada gráfica fuera de la diagonal. Esto proporciona información cuantitativa sobre la relación entre las variables.

Para una presentación más informativa, podemos ajustar títulos, etiquetas y el espacio entre subplots:

# Personalizar gráficos con títulos y ajustes de espacio
g = sns.PairGrid(iris, hue="species")
g.map_diag(sns.histplot)
g.map_offdiag(sns.scatterplot)
g.add_legend(title="Especie")
g.figure.subplots_adjust(top=0.95)
g.figure.suptitle('Relaciones entre variables en el conjunto de datos Iris', fontsize=16)
plt.show()

Utilizando g.fig.suptitle, añadimos un título general a la figura, y con subplots_adjust ajustamos la disposición para una mejor visualización.

La capacidad de personalización de PairGrid es especialmente útil al trabajar con conjuntos de datos complejos donde es necesario explorar detalladamente las interacciones entre variables. Nos permite:

  • Diferenciar categorías con el argumento hue, facilitando la comparación entre grupos.
  • Utilizar múltiples tipos de gráficos para resaltar diferentes aspectos de los datos.
  • Incorporar funciones personalizadas para análisis específicos.

PairGrid es una herramienta versátil y potente para el análisis exploratorio de datos multivariados en Seaborn. Al aprovechar su flexibilidad, podemos crear visualizaciones adaptadas que profundizan en las relaciones entre variables, aportando un valor significativo al proceso de análisis de datos.

Aprende Seaborn GRATIS online

Ejercicios de esta lección Grids Multiplot en Seaborn

Evalúa tus conocimientos de esta lección Grids Multiplot en Seaborn con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de Seaborn

Accede a todas las lecciones de Seaborn y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Accede GRATIS a Seaborn y certifícate

Certificados de superación de Seaborn

Supera todos los ejercicios de programación del curso de Seaborn y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.

En esta lección

Objetivos de aprendizaje de esta lección

  • Entender cuándo es apropiado utilizar múltiples plots en un gráfico.
  • Aprender a crear y personalizar cuadrículas de gráficos con FacetGrid.
  • Utilizar PairGrid para visualizar relaciones bivariadas entre pares de variables.
  • Segmentar datos y añadir dimensiones adicionales a las visualizaciones.
  • Personalizar las propiedades estéticas y añadir funciones personalizadas a los gráficos.