No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Relation

15/18
Recursos

Seaborn maneja los gráficos de relación entre distintas variables numéricas para hacer visualizaciones. Veamos los distintos gráficos que tiene Seaborn para trabajar este tipo de relaciones.

Tipos de gráficos de relación en Seaborn

Empieza importando los datos para empezar a graficar

import seaborn as sns
import matplotlib.pyplot as plt 

tips = sns.load_dataset('tips')
tips.head(2)

1. Scatter

sns.scatterplot(data= tips, x= 'total_bill', y = 'tip', hue= 'day');
scatter.JPG
  • Cambiar el estilo de los puntos y su tamaño
sns.scatterplot(data= tips, x= 'total_bill', y = 'tip', hue= 'day', style= 'time', size='size');
plt.legend(loc= 'center', bbox_to_anchor= (1.12, 0.5))
scatter_style.JPG
  • Cambiar el formato de los marcadores
markers = {"Lunch": 'D', "Dinner": 's'}
sns.scatterplot(data= tips, x= 'total_bill', y = 'tip', hue= 'day', style= 'time', size='size', markers = markers);
plt.legend(loc= 'center', bbox_to_anchor= (1.12, 0.5));
markers.JPG

2. Line

sns.lineplot(data= tips, x= 'total_bill', y = 'tip',  hue= 'day', style= 'time', size='size');
lineplot.JPG

3. Relplot

  • Con kind podemos modificar el tipo de gráfico
sns.relplot(data= tips, x= 'total_bill', y = 'tip',  hue= 'day', style= 'time', size='size', kind= 'line');
relplot.JPG
  • Agregar el formato col
sns.relplot(data= tips, x= 'total_bill', y = 'tip',  hue= 'day', style= 'time', size='size', kind= 'scatter', col = 'time');
col.JPG

Aportes 50

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

También podemos usar pairplot, te permite ver comparativas de pares de variables y analizar su comportamiento en un solo gráfico.

sns.pairplot(data=tips,hue='day')
plt.show() 

No se porque hasta ahora no se menciona pero hay un parametro llamado “ax” para poder usar seaborn en subplots

No se trata de que un grafico sea mas complicado de ver que otro, y no se trata de gustos, cuando el profesor dice “en lo personal me gusta mas este”, todo va a depender de la de variable que se esta graficando, de lo que se esta analizando, no vas a usar un grafico de dispersion para ver una serie de tiempo.
Por eso no me parece correcto que el profesor hable de gustos personales o de que un grafico sea mas sencillo que otro en lineas generales ya que la “claridad” depende de lo que se este analizando.

La función “col=” es MARAVILLOSA. Te reduce mucha data a un simple golpe de vista.

Cambiar el tipo de grafica con kind:

Para visualizar un poco mejor los últimos datos del video podemos cambiar las columnas a “day”

Super recomendad la gráfica pairplot.

Información resumida de esta clase
#EstudiantesDePlatzi

  • Los gráficos de relación me ayuda a ver la relación o correlación de diferentes variables numéricas

  • En seaborn creo que gráfico de dispersión con la función scatterplot

  • Dentro de esta gráfica puedo categorizar por otra variable utilizando el parámetro style

  • Puedo saber la frecuencia de mis datos utilizando el parámetro size

  • Para manejar la legenda lo hago desde Matplotlib con la función legend y allí defino su ubicación

  • Igualmente, puedo usar la función relplot para decirle a seaborn que me sugiera una gráfica para visualizar una relación

15. Relation

import seaborn as sns
import matplotlib.pyplot as plt

tips = sns.load_dataset('tips')
tips.head()

plt.figure(figsize=(8,8))
markers = {"Lunch":"D","Dinner":"s"}
sns.scatterplot(data=tips,x='total_bill',y='tip',hue='day',style='time',size='size',markers=markers);
plt.legend(loc='center',bbox_to_anchor=(1.12,0.5))

sns.lineplot(data=tips,x='total_bill',y='tip',hue='day',style='time',size='size');
plt.legend(loc='center',bbox_to_anchor=(1.12,0.5))

sns.relplot(data=tips,x='total_bill',y='tip',hue='day',style='time',size='size',col='time');
plt.figure(figsize=(8,8))
markers = {"Lunch":"D","Dinner":"o"}
sns.relplot(data=tips, x='total_bill', y='tip', hue='day', style='time', size='size', markers=markers,kind='line',col='time')
plt.legend(loc='center', bbox_to_anchor=(1.12,0.5))
plt.show()

Para hacer el gráfico kind=line dejé en el dataset solo los números de comensales 2,3 y 4 que son los más representativos y puse el número de comensales (size) como col.

cond_234 =(tips['size'] > 1) & (tips['size'] < 5)
tips_234 = tips[cond_234] 
markers = {"Lunch":"X", "Dinner":"s"} # defino la forma de los puntos 
sns.relplot(data=tips_234 ,x='total_bill',y='tip',hue='day',style='time',col='size',size='time',markers=markers,kind='line') # usa 
plt.show()

El gráfico de 2 personas quedó confuso. Pero el de 3 y 4 comensales son más claros. Las líneas unen los puntos de igual day y time.
Todas las líneas por lo general muestran la relación positiva entre la facturación y las propinas.

![](https://static.platzi.com/media/user_upload/image-1b562628-7956-4e47-a088-06ddb55f7375.jpg)
![](https://static.platzi.com/media/user_upload/image-3e59b82f-3617-4c4f-be7a-c1a2c931531c.jpg)
Grafico relplot con Seaborn usando líneas: ![](https://static.platzi.com/media/user_upload/image-cf615117-5035-4dcd-bc1f-103dd27abdac.jpg)
![](https://static.platzi.com/media/user_upload/image-467ff572-7ac9-4ef5-9abc-4d772d246e56.jpg)
por si les queda mal la visualizacion `sns.scatterplot(data=tips, x='total_bill', y='tip', hue='day', style='time', size='size')` `# Ajustar la leyendaplt.legend(loc='center left', bbox_to_anchor=(1.12, 0.5))` `# Mostrar el gráficoplt.show()`
Hola, Les comparto como dibuje el lineplot con relplot; ![](https://static.platzi.com/media/user_upload/imagen-b4db99ad-1b2b-407e-925c-85ee1c35b6a9.jpg)
![](https://static.platzi.com/media/user_upload/image-acf4481b-9ebf-4548-8891-72f733f764c0.jpg)

Estoy sorprendido con el desarrollo de estos graficos de relacion y como su uso puede ser implementado en muchas empresas. Es mejor saber como realizarlo sin tener algun conflicto.

![](https://static.platzi.com/media/user_upload/image-32943bb6-3f3a-46b8-b85f-e11bcf3681f6.jpg)sns.relplot(data=tips, x='total\_bill', y='tip', hue='day', style='time', size='size', kind='line')plt.show()```js sns.relplot(data=tips, x='total_bill', y='tip', hue='day', style='time', size='size', kind='line')plt.show() ```Reto listo y efectivamente esta muy feo jaja

Aqui el resultado del reto

sns.relplot(data=tips,x='total_bill',y='tip',hue='day',style='time',size='size',kind='line')
plt.show()

El pequeño reto

sns.relplot(data=tips, x='total_bill',y='tip', hue='day', style='time', size='size', kind='line');

sns.relplot(data=tips,x=‘total_bill’,y=‘tip’,hue=‘day’,style=‘time’,size=‘size’,kind=‘line’)
plt.show()

Leyendo un poco la guía de Seaborn, vi que relplot tiene 2 tipos de kind (‘scatter’ y ‘line’).

Quería colocar 2 imágenes juntas utilizando la función relplot con la misma data con kind=‘scatter’ a la izquierda y kind=‘line’ a la derecha y relplot no permite trabajar con el parámetro ‘ax’.

Así que la solución es trabajar independientemente con scatterplot y lineplot y hacer las respectivas configuraciones para que se vea bien.

Código:

import matplotlib.pyplot as plt
import seaborn as sns

# Crear los subplots con más espacio entre ellos
fig, axes = plt.subplots(1, 2, figsize=(16, 4.5), gridspec_kw={'wspace': 0.32})

# Subplot 1 - Scatterplot
sns.scatterplot(data=tips, x='total_bill', y='tip', hue='day', style='time', size='size', ax=axes[0])
axes[0].legend(loc='upper right',bbox_to_anchor=(1.2,1.02))

# Subplot 2 - Lineplot
sns.lineplot(data=tips, x='total_bill', y='tip', hue='day', style='time', size='size', ax=axes[1])
axes[1].legend(loc='upper right',bbox_to_anchor=(1.2,1.02))

plt.show()
sns.relplot(data = tips, x = 'total_bill', y = 'tip', hue = 'day', style = 'time', size = 'size', col = 'time', kind = 'line')
plt.show() 
sns.relplot(data=tips,x="total_bill",y="tip",hue="day",size="size",kind="scatter",col="time")
plt.show()
sns.relplot(data=tips,x='total_bill',y='tip',hue='day',style='time',size='size',kind='line')
plt.show()

(

sns.relplot(data=tips, x='total_bill', y='tip',hue='day',style='time',size='size',markers=markers, kind='line')
plt.show()

mi aporte , esta es una herramienta muy poderosa =D

<sns.relplot(data=tips, x='total_bill', y='tip', hue='day',style='time', size="size", kind='line')
plt.show()> 
sns.relplot(data=tips,x='total_bill',y='tip',hue='day',style='time',size='size',kind='line')
plt.show()

Aquí mi aporte, use el dataset referente a la esperanza de vida de algunos países a lo largo de los años (healthexp), muy interesante observar cómo se relaciona directamente con el aumento de los salarios y el pasar de los años, además se puede observar como para el 2020 hubo una disminución en todos los países, posiblemente por la contingencia sanitaria del Sars 2 Covid 19.

dots = sns.load_dataset("healthexp")
 sns.scatterplot(data=dots, x="Year",y="Life_Expectancy",hue="Country",size="Spending_USD")
 plt.legend(loc="center",bbox_to_anchor=(1.2,0.6))

Tambien es evidente en el lineplot:

dots = sns.load_dataset("healthexp")
 sns.lineplot(data=dots, x="Year",y="Life_Expectancy",hue="Country")
 plt.legend(loc="center",bbox_to_anchor=(1.2,0.6))

Y si agregamos los parámetro row y col podemos separar aún más nuestros datos para mejor lectura.

plt.figure(figsize=(10,10))
markers = { "Lunch":"D", "Dinner":"s"} # predefino los markers con un diccionario
sns.relplot(data=tips, x='total_bill', y='tip', hue='day', style='time', size='size', markers=markers, col='day', row='time');

RETO DE CLASE

Con relplot estoy teniendo el mismo problema que tuve con displot: no puedo expandir el lienzo. A alguien más le sucede? De ser así: encontraron la solución?

Seaborn maneja los gráficos de relación entre distintas variables numéricas para hacer visualizaciones. Veamos los distintos gráficos que tiene Seaborn para trabajar este tipo de relaciones.
Tipos de gráficos de relación en Seaborn Empieza importando los datos para empezar a graficar
________________________________________
[1]
0 s
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib import markers
________________________________________
[2]
0 s
tips = sns.load_dataset("tips")
tips.head(10)
________________________________________
[3]
0 s
sns.scatterplot(data=tips,x="total_bill",y="tip")
plt.show()
#aca estamos graficando la relacion entre la cuenta y las propinas y podemos notar que cuando la cuanta es alta 
#mas propinan dejan los clientes, pueden haver casos atipicos, pero si hay cieta relacion entre las valriables 

________________________________________
[4]
0 s
sns.scatterplot(data=tips,x="total_bill",y="tip",hue="day")
plt.show()
#lo segmentamos y por cada color me reprecenta u dia distinto por semana y notamos que por dia hay cuentas diferentes 
________________________________________
[5]
0 s
sns.scatterplot(data=tips,x="total_bill",y="tip",hue="day",style="time")
plt.show()
#con style estamos reprecentando el tiempo que seria almuerzo y sena y me los reprecenta en circulos y equiz
#lo que podemos notar en la grafica es que para las senas la cuenta es mucho mas grande 
#estas relaciones se están haciendo entre cuenta y propina 
________________________________________
[6]
0 s
plt.figure(figsize=(8,8))
sns.scatterplot(data=tips,x="total_bill",y="tip",hue="day",style="time",size="size")
plt.legend(loc="center",bbox_to_anchor=(1.12,0.5))
plt.show()
#size es el tamaño de los markers que tengo y size me reprecenta el numero de comenzales 
#aca puedo hacer los analisis a nivel de grafico desde mi scatteplot 
________________________________________
[7]
0 s
markers = {"Lunch":"D", "Dinner":"s"}
plt.figure(figsize=(8,8))
sns.scatterplot(data=tips,x="total_bill",y="tip",hue="day",style="time",size="size",markers=markers)
plt.legend(loc="center",bbox_to_anchor=(1.12,0.5))
plt.show()
#scatterplot en searbon se manejan propiedades bastente utiles y custumisables
#aca tengo lo mismo que en el grafico anterior pero aca lo estoy predefiniendo 
________________________________________
hay otro grafico bastante útil que también me sirve para ver relaciones, es algo un poco más complicado de analizar, pero es bastante útil
________________________________________
[ ]
sns.lineplot(data=tips,x="total_bill",y="tip")
plt.show()
#esta grafica nos muetra una linea que es muy dificil de analisar, pero tambiem me muetra la relacion entre la cuenta y propinas 
________________________________________
[9]
plt.figure(figsize=(8,8))
sns.lineplot(data=tips,x="total_bill",y="tip",hue="day",style="time",size="size")
plt.legend(loc="center",bbox_to_anchor=(1.12,0.5))
plt.show()
________________________________________
[12]
0 s
plt.figure(figsize=(8,8))
sns.relplot(data=tips,x="total_bill",y="tip",hue="day",style="time",size="size")
plt.show()
________________________________________
[13]
plt.figure(figsize=(8,8))
sns.relplot(data=tips,x="total_bill",y="tip",hue="day",style="time",size="size",col="time")
plt.show()
#relplot es un grafico bastente poderoso y util y es muy usado en la actualidad
________________________________________
[17]
0 s
plt.figure(figsize=(8,8))
sns.relplot(data=tips,x="total_bill",y="tip",hue="day",style="time",size="size",col="time",kind="scatter")
plt.show()
________________________________________
[18]
0 s
plt.figure(figsize=(8,8))
sns.relplot(data=tips,x="total_bill",y="tip",hue="day",style="time",size="size",col="time",kind="line")
plt.show()
________________________________________
[25]
3 s
sns.pairplot(data=tips,hue='day')
plt.show() 
________________________________________


reto


Graffiti.

Mi solución al reto de clase, utilizando el comando kind en relplot:

sns.relplot(data= tips, x= 'total_bill', y = 'tip', hue = 'day', style='time', size= 'size', kind='line')
plt.show()

Para controlar el área de los marcadores podemos usar el parámetro sizes, el cual se indica como tupla. Entre mayor sea el intervalo, mayor el tamaño de los marcadores:

plt.figure(figsize=(8,6))
sns.scatterplot(data=tips, x='total_bill', y='tip', hue='day',
                size='size', sizes=(20,300), legend = 'full',
                palette='deep');
plt.legend(loc='center', bbox_to_anchor=(1.12, 0.5));

Mi aporte de la clase: kind=‘lines’

Reto

Desafio de la clase:

sns.relplot(data=tips, x='total_bill', y='tip', hue='day', style='time', size='size', kind='line') # Dificil de analizar, pero tmb nos muestra la relación entre una variable numerica y otra
plt.legend(loc='center', bbox_to_anchor=(1.15,0.47))
plt.show()

Reto cambiando kind con las columnas.

Otros ejemplos Graficos