Crear facetas consiste en dividir los datos según los valores de una o dos variables categóricas y dibujar un subplot para cada grupo. En seaborn, las funciones a nivel de figura (relplot, displot, catplot y lmplot) permiten crear facetas directamente con los argumentos col y row.
col y row
Pasa el nombre de una columna a col para crear un subplot por grupo en columnas diferentes, o a row para colocarlos en filas diferentes.


import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
sns.relplot(data = tips, x = "total_bill", y = "tip",
col = "time", height = 3.5)
# plt.show()
Filas y columnas
Combina ambos argumentos para crear una cuadrícula con todas las combinaciones de dos variables.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
sns.displot(data = tips, x = "total_bill",
col = "time", row = "smoker", height = 2)
# plt.show()


col_wrap
Cuando una variable tiene muchos grupos, col_wrap establece el número máximo de columnas y el resto de facetas continúan en la fila siguiente.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
sns.catplot(data = tips, x = "sex", y = "total_bill", kind = "box",
col = "day", col_wrap = 2, height = 2)
# plt.show()


Los títulos de las facetas se pueden cambiar con set_titles, donde {col_name} y {row_name} se reemplazan por el valor de cada grupo. Agrega un título general con g.figure.suptitle.


import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
g = sns.relplot(data = tips, x = "total_bill", y = "tip",
col = "time", height = 3.5)
g.set_titles("Servicio: {col_name}")
g.figure.suptitle("Propinas según el momento del día", y = 1.05)
# plt.show()
Por defecto todas las facetas comparten los mismos límites de los ejes, lo que facilita las comparaciones. Utiliza facet_kws = {"sharey": False} (o sharex) para que cada faceta tenga su propia escala.


import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
sns.displot(data = tips, x = "tip", col = "time", height = 3.5,
facet_kws = {"sharey": False})
# plt.show()
FacetGrid
FacetGrid permite crear primero la cuadrícula y dibujar cualquier función de gráficos en cada faceta con map o map_dataframe.



import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col = "time", hue = "smoker", height = 3.5)
g.map_dataframe(sns.scatterplot, x = "total_bill", y = "tip")
g.add_legend()
# plt.show()
Personalizar cada faceta
El atributo axes de la cuadrícula contiene los ejes de cada faceta, por lo que puedes personalizarlos individualmente con matplotlib, por ejemplo agregando una línea de referencia.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
g = sns.relplot(data = tips, x = "total_bill", y = "tip", col = "time")
for ax in g.axes.flat:
ax.axhline(tips["tip"].mean(), color = "red", linestyle = "--")
# plt.show()
Aprende a cambiar el tamaño de las facetas en el tutorial sobre el tamaño de la figura en seaborn. Para combinar distintos tipos de gráficos en una misma figura utiliza los subplots de matplotlib.
También te puede interesar