sns.set_style(style="darkgrid", rc={"grid.color": ".6"})
sns.set_style(rc={"grid.linestyle": ":"})
sns.set_style(rc={"axes.titleweight": "normal"})
sns.set_style(rc={"axes.titlelocation": "left"})
sns.set_style(rc={"axes.titlecolor": "blue"})
sns.set_style(rc={"axes.labelcolor": "red"})
sns.set_style(rc={"axes.labelsize": "12"})
sns.set_style(rc={"axes.labelweight": "normal"})
sns.set_style(rc={"axes.linewidth": "0.5"})
sns.set_style(rc={"grid.color": "purple"})
sns.set_style(rc={"grid.linestyle": "--"})
sns.set_style(rc={"grid.linewidth": "0.5"})
sns.set_style(rc={"font.fantasy": "Comic Sans MS"})
sns.set_style(rc={"font.serif": "Utopia"})
penguins = sns.load_dataset("penguins")
# Axis-level
sns.histplot(data=penguins, x="flipper_length_mm")
Los valores son mediciones del pulso de 30 personas tras realizar algún tipo de actividad por un determinado tiempo. Las columnas son:
Id: número identificador de la persona
Diet: dieta de la persona = baja en grasas o sin grasas
Time: duración del ejercicio = 1 min, 15 min o 30 min
Kind: tipo de ejercicio = reposo, caminar o correr
# Ejemplo aplicado
df_ejercicio = sns.load_dataset('exercise')
df_ejercicio = df_ejercicio.drop('Unnamed: 0', axis='columns')
df_ejercicio.head()
Observemos la distribución de las mediciones luego de 30 minutos de realizar el ejercicio.
1- Extraigamos sólo aquellas observaciones que se corresponden con un ejercicio de 30 minutos
df_30_min = df_ejercicio[df_ejercicio['time'] == '30 min'] # Máscara booleana
df_30_min.head()
Graficamos las distribuciones con sns.displot
Debemos especificar la columna de valores en el parámetro x, en este caso nos interesa la columna pulse
Como queremos separar las distribuciones según el tipo de actividad, pasamos el parámetro hue='kind'
plt.figure()
# Figure -level
ax = sns.displot(data=df_30_min, x='pulse', kind='kde', hue='kind', fill=True)
ax.set(xlabel='Frecuencia Cardíaca', ylabel='Densidad', title='Distribución de las pulsaciones')
Como era de esperar, aquellas personas que corrieron terminaron (en promedio) con una mayor frecuencia cardíaca respecto de las que no lo hicieron.
Para comparar las distribuciones en base a las dietas, sólo hay que cambiar el parámetro hue
plt.figure()
# Figure -level
ax = sns.displot(data=df_30_min, x='pulse', kind='kde', hue='diet', fill=True)
ax.set(xlabel='Frecuencia Cardíaca', ylabel='Densidad', title='Distribución de las pulsaciones')
Comparación desgregando por dos categorías
Si bien los ejemplos anteriores nos permitían visualizar las distribuciones de acuerdo a una categoría, podríamos querer visualizar los datos en base a dos variables distintas 🤔
sns.catplot con el parámetro kind='violin' permite comparar distribuciones separando los datos en base a dos categorías simultáneamente.
Visualicemos las pulsaciones en base a la duración de la actividad y al tipo de dieta:
ax = sns.catplot(data=df_ejercicio, kind='violin', x='time', y='pulse', hue='diet', split=True)
ax.set(xlabel='Duración de ejercicio', ylabel='Frecuencia cardíaca', title='Categorización de la distribución de pulsaciones')
Para visualizar en base a la actividad, únicamente cambiamos el valor del parámetro x
ax = sns.catplot(data=df_ejercicio, kind='violin', x='kind', y='pulse', hue='diet', split=True)
ax.set(xlabel='Tipo de ejercicio', ylabel='Frecuencia cardíaca', title='Categorización de la distribución de pulsaciones')