Diagrama de dispersión

La función seaborn.relplot muestra, por defecto, un diagrama de dispersión de las dos variables pasadas como argumentos:

iris = sns.load_dataset("iris")

sns.relplot(x = "sepal_length", y = "sepal_width", data = iris);

Diagrama de dispersión

Estas variables suelen ser cuantitativas pues, en el caso de que alguna de ellas sea cualitativa, seaborn ofrece gráficas más adecuadas para visualizar la relación entre ellas, como veremos más adelante.

El comportamiento por defecto de la función sns.relplot es el correspondiente al argumento kind = "scatter". Es decir, las dos siguientes instrucciones son equivalentes:

sns.relplot(x = "sepal_length", y = "sepal_width", data = iris);

sns.relplot(x = "sepal_length", y = "sepal_width", data = iris, kind = "scatter");

Es posible añadir una dimensión adicional utilizando el parámetro "hue" ("tonalidad" en español). Éste controla el color de los puntos:

tips = sns.load_dataset("tips")

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

Diagrama de dispersión

En el caso anterior se ha utilizado una variable cualitativa para establecer el color de los puntos, lo que resulta muy sencillo de interpretar (si su cardinalidad no es muy elevada: si tuviésemos 28 valores distintos en la variable "sex" probablemente no sería tan fácilmente interpretable). También podemos utilizar una variable cuantitativa, aunque esto eleva ligeramente la complejidad de la gráfica. Por ejemplo, si mostramos por colores el número de comensales (característica "size"), el resultado es el siguiente:

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

Diagrama de dispersión

Obsérvese como, en este caso, seaborn ha cambiado la paleta de colores a una secuencial.

El parámetro style permite añadir una dimensión adicional al aplicar un marcador diferente a cada uno de los puntos en función de los valores de la variable que se indique. Si se está añadiendo este criterio de segmentación a una gráfica en la que ya estuviésemos haciendo uso del color (parámetro hue) para segmentar los datos, el resultado puede resultar claramente difícil de interpretar. Por ejemplo, en la siguiente gráfica se modifica la anterior para añadir símbolos distintos en función de que la comida haya sido almuerzo o cena:

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

Diagrama de dispersión

El resultado, efectivamente, no transmite el mensaje con la facilidad que desearíamos (y en este caso solo tenemos dos valores en la variable sex y otros dos en la variable time. Si su cardinalidad fuese mayor, el resultado sería todavía más confuso). Lo que sí podemos hacer es utilizar este herramienta para cambiar los puntos no solo por color según el valor de la variable sex, sino también por símbolo, para reforzar el mensaje:

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

Diagrama de dispersión

La tercera alternativa para añadir una nueva dimensión a los datos es mediante el tamaño de los puntos, lo que podemos conseguir con el parámetro size:

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

Diagrama de dispersión

En la imagen anterior estamos modificando el tamaño del punto en función del número de comensales (campo size del conjunto de datos).

Como se ha comentado, la función seaborn.relplot ejecuta, por defecto, la función seaborn.scatterplot (siendo ésta última una función a nivel de ejes). De esta forma, la anterior gráfica puede ser también creada con la siguiente instrucción:

sns.scatterplot(x = "total_bill", y = "tip", size = "size", data = tips);

La función sns.scatterplot

El único cambio apreciable es el tamaño de la gráfica, pero no olvidemos que las funciones a nivel de figura crean y controlan la figura y el conjunto de ejes según sus propios criterios.

Deshabilitando la leyenda

En ocasiones puede ser conveniente ocultar la leyenda de la gráfica. Para ello, basta con añadir el argumento legend = False. De esta forma, si repetimos el gráfico anterior con esta modificación:

sns.scatterplot(x = "total_bill", y = "tip", size = "size", data = tips, legend = False);

scatterplot sin leyenda

...vemos que no se ha mostrado.