Facets

Vemos que, aun cuando es técnicamente posible aumentar el número de dimensiones mostradas en una gráfica, el resultado no siempre es tan comprensible como desearíamos. Una alternativa es la generación de múltiples gráficas, cada una mostrando los datos relativos a un valor de la dimensión adicional. Estas gráficas múltiples es lo que en seaborn se denominan facets. Veamos un ejemplo: Ya hemos visto que podemos recurrir al uso de diferentes marcadores para diferenciar valores de una variable categórica:

sns.relplot(x = "total_bill", y = "tip", hue = "sex", data = tips, style = "time");

Facets

En este ejemplo estamos cruzando las variables tip y total_bill, diferenciando los puntos según el sexo de la persona que dejó la propina (azul hombres y naranja mujeres), y usando símbolos distintos (puntos y aspas) para diferenciar la comida en cuestión: el punto representa un almuerzo y el aspa una cena. Esto nos lleva a tener puntos azules y puntos naranjas (representando hombre-almuerzo y mujer-almuerzo, respectivamente) y aspas azules y aspas naranjas (representando hombre-cena y mujer-cena). Pues bien, con el parámetro col podemos mostrar en columnas los datos correspondientes a valores distintos de una variable, por ejemplo, la variable time indicando el tipo de comida:

sns.relplot(x = "total_bill", y = "tip", hue = "sex", data = tips, col = "time");

Facets

Ahora, lo que antes eran puntos representando almuerzos es ahora una gráfica -la de la izquierda- que solo muestra dicha información. Y lo que eran aspas indicando cenas es ahora también una gráfica independiente -la de la derecha-. La información es mucho más clara ahora que antes.

También es posible mostrar las gráficas en filas usando el parámetro row. En el siguiente ejemplo volvemos a cruzar las variables tip y total_bill, desglosando la información por sexo (y mostrando este desglose con diferentes colores) y desglosamos a su vez la gráfica en dos: una con información sobre fumadores y otra con información sobre no fumadores:

sns.relplot(x = "total_bill", y = "tip", hue = "sex", data = tips, row = "smoker");

Facets

Por supuesto, podemos combinar los parámetros row y col para desglosar nuestra gráfica base según dos criterios adicionales (lo que supone añadir dos dimensiones a la visualización). En el siguiente ejemplo combinamos los dos ejemplos anteriores, mostrando en filas el hecho de que el cliente sea o no fumador, y en filas el tipo de comida:

sns.relplot(x = "total_bill", y = "tip", hue = "sex", data = tips, row = "smoker", col = "time");

Facets

Lógicamente, si la cardinalidad de estas variables es elevada, podemos encontrarnos con gráficas excesivamente grandes. Una opción es modificar el tamaño de la figura usando los parámetros height y/o aspect: Por ejemplo, se muestra a continuación la figura anterior limitando la altura de la misma:

sns.relplot(x = "total_bill", y = "tip", hue = "sex", data = tips, row = "smoker", col = "time", height = 4);

Facets

Y, a continuación, con un aspecto modificado:

sns.relplot(x = "total_bill", y = "tip", hue = "sex", data = tips, row = "smoker", col = "time", height = 3, aspect = 2);

Facets

Si estamos añadiendo solo una variable y mostrándola en columnas, si la cardinalidad de esta variable es elevada las gráficas resultantes puedes ser tan pequeñas que no sean apreciables los detalles:

sns.relplot(x = "total_bill", y = "tip", hue = "sex", data = tips, col = "size");

Facets

En la imagen anterior estamos mostrando por columnas los valores del campo "size" que indica el número de comensales. Efectivamente, es imposible incluso leer el título de cada gráfica.

La solución es limitar el número de gráficas por fila usando el parámetro col_wrap. Si repetimos la figura anterior limitando a 3 el número de gráficas por fila, el resultado es el siguiente:

sns.relplot(x = "total_bill", y = "tip", hue = "sex", data = tips, col = "size", col_wrap = 3);

Facets

...mucho más claro, sin duda, aun cuando los cambios no se muestren estrictamente solo en columnas o en filas. Recuerda en todo caso que esta opción está disponible solo si los facets se reparten en columnas (no puedes estar haciendo uso del parámetro row).