Autor: Luis Fernando Apáez Álvarez
-Curso PyM-
Clase 3: Librería Seaborn (Parte III)
Fecha: 08 de diciembre del 2022
Continuamos con las clases en las que abordamos temas sobre visualizaciones con seaborn.
Dentro de seaborn existen 5 formas de estilos predeterminados los cuales cambian el color de fondo y los ejes de los gráficos. Dichas formas de estilos son: white, dark, whitegrid, darkgrid y ticks.
Podemos configurar dichos estilos como una configuración global para todos los gráficos utilizando la función sns.set_style()
como sigue
import seaborn as sns
# configuracion global de los graficos
sns.set_style('dark')
# cargamos el conjunto de datos
df_tips = sns.load_dataset('tips')
df_tips.head()
total_bill | tip | sex | smoker | day | time | size | |
---|---|---|---|---|---|---|---|
0 | 16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
1 | 10.34 | 1.66 | Male | No | Sun | Dinner | 3 |
2 | 21.01 | 3.50 | Male | No | Sun | Dinner | 3 |
3 | 23.68 | 3.31 | Male | No | Sun | Dinner | 2 |
4 | 24.59 | 3.61 | Female | No | Sun | Dinner | 4 |
# probamos realizando un grafico
ax = sns.catplot(data=df_tips,
x='sex',
y='total_bill',
kind='bar')
donde notamos un claro cambio en el estilo de graficación respecto con el que estabamos acostumbrados. De manera alternativa
sns.set_style('whitegrid')
ax = sns.catplot(data=df_tips,
x='sex',
y='total_bill',
kind='bar')
donde en ese caso dicho estilo de graficación es más conveniente puesto que las líneas horizontales nos ayudan a visualizar más fácil los valores, promedio, de total_bill
para cada categoría.
Por otro lado, podemos cambiar el color de los elementos principales del gráfico con la función sns.set_palette()
, donde podemos especificar una paleta de colores de las que seaborn ya trae por defecto, o configurar nuestras propias paletas de colores.
# algunas paletas predeterminadas:
# RdBu, PRGn, RdBu_r (con la r se invierte la paleta), PRGn_r
sns.set_palette('RdBu')
ax = sns.catplot(data=df_tips,
x='sex',
y='total_bill',
kind='bar')
# algunas paletas predeterminadas secuenciales
# Greys, Blues, PuRd, GNBu
sns.set_palette('Blues')
ax = sns.catplot(data=df_tips,
x='sex',
y='total_bill',
kind='bar')
Podemos crear también paletas de colores personalizadas:
# creamos una paleta de colores con 3 colores
paleta_custom = ['red', 'green', 'blue']
# especificamos dicha paleta en la funcion set_palette()
sns.set_palette(paleta_custom)
# ------------------------------------------------------
# el siguiente grafico que realicemos tendra los colores
# de la paleta que definimos antes
Finalmente, podemos cambiar las escalas de nuestros gráficos con la función sns.set_context()
# posibles valores:
# paper, notebook, talk, poster
sns.set_context('paper')
ax = sns.catplot(data=df_tips,
x='sex',
y='total_bill',
kind='bar')
# posibles valores:
# paper, notebook, talk, poster
sns.set_context('talk')
ax = sns.catplot(data=df_tips,
x='sex',
y='total_bill',
kind='bar')
Dentro de seaborn ha dos tipos de objetos con los cuales trabaja: FaceGrid
y AxesSubplot
. Por ejemplo, considerando que al gráfico anterior lo hemos asignado a la variable ax
podemos ver cuál es su tipo de dato:
type(ax)
seaborn.axisgrid.FacetGrid
Un FaceGrid
consta de uno o más AxesSubplots
, de modo que los gráficos hechos mediante la función catplot()
constan de uno más AxesSubplots
, lo cual tiene sentido pues con dicha función podemos realizar más de un gráfico en la misma figura.
Un ejemplo de AxesSubplots
es un diagrama de dispersión
g = sns.scatterplot(data=df_tips, x='tip', y='total_bill')
type(g)
matplotlib.axes._subplots.AxesSubplot
Por convención a las variables que le asignamos gráficos de seaborn se les coloca la letra g como nombre de variable.
Ahora bien, podemos agregar títulos a nuestros gráficos
import matplotlib.pyplot as plt
# Configuramos un grafico
g = sns.catplot(data=df_tips,
x='sex',
y='total_bill',
kind='bar')
# agregamos un titulo
g.fig.suptitle('Título')
plt.show()
Podemos ajustar la altura en la cual esta colocado el título
# Configuramos un grafico
g = sns.catplot(data=df_tips,
x='sex',
y='total_bill',
kind='bar')
# agregamos un titulo
g.fig.suptitle('Título',
# elevamos un poco la altura
# del titulo
y = 1.09)
plt.show()
Tenemos que fig.suptitle()
nos sirve para agregar un título, no obstante, solo sirve para objetos del tipo FaceGrid
. Luego, para agregar títulos para objetos del tipo AxesSubplots
utilizaremos en su lugar set_title()
.
Por otro lado, supongamos que el gráfico tiene subgráficos
g = sns.catplot(data=df_tips,
x='sex',
y='total_bill',
col='smoker',
kind='bar')
# agregamos un titulo
g.fig.suptitle('Título del gráfico',
y=1.05)
plt.show()
Para agregar títulos a cada subgráfico utilizaremos la función para agregar títulos a objetos del tipo AxesSubplots
:
g = sns.catplot(data=df_tips,
x='sex',
y='total_bill',
col='smoker',
kind='bar')
# agregamos un titulo
g.fig.suptitle('Título del gráfico',
y=1.05)
g.set_titles('Título para los subgráficos')
plt.show()
notamos que los títulos para los subgráficos es el mismo. Podemos configurar para que se muestre en los títulos de los subgráficos los valores de la columna en la cual específicamos col='smoker'
g = sns.catplot(data=df_tips,
x='sex',
y='total_bill',
col='smoker',
kind='bar')
# agregamos un titulo
g.fig.suptitle('Título del gráfico',
y=1.05)
# entre llaves colocamos col_name
g.set_titles('Título para los subgráficos: {col_name}')
plt.show()
y vemos que se muestran los dos valores de la columna smoker
.
Podemos colocar títulos a las etiquetas de los ejes
# Funciona para AxesSubplots y FaceGrid:
g = sns.scatterplot(data=df_tips, x='tip', y='total_bill')
g.set(xlabel='Tip',
ylabel='total_bill')
plt.show()
Podemos rotar las etiquetas de los ejes utilizando matplotlib:
# Funciona para AxesSubplots y FaceGrid:
g = sns.scatterplot(data=df_tips, x='tip', y='total_bill')
g.set(xlabel='Tip',
ylabel='total_bill')
# Rotacion de las etiquetas del eje x
plt.xticks(rotation=90)
# Rotacion de las etiquetas del eje y
plt.yticks(rotation=90)
plt.show()
Realizamos lo mismo para objetos del tipo FaceGrid
solo que ahora haremos la rotación de las etiquetas utilizando seabonr
g = sns.catplot(data=df_tips,
x='sex',
y='total_bill',
col='smoker',
kind='bar')
# agregamos un titulo
g.fig.suptitle('Título del gráfico',
y=1.05)
# entre llaves colocamos col_name
g.set_titles('Título para los subgráficos: {col_name}')
# titulos para las etiquetas de los ejes
g.set(xlabel='Sexo',
ylabel='Total factura')
# rotamos las etiquetas
g.set_xticklabels(rotation=90)
plt.show()
# Alternativamente
g = sns.catplot(data=df_tips,
x='sex',
y='total_bill',
col='smoker',
kind='bar')
# agregamos un titulo
g.fig.suptitle('Título del gráfico',
y=1.05)
# entre llaves colocamos col_name
g.set_titles('Título para los subgráficos: {col_name}')
# Cambiamos el titulo de las etiquetas de los ejes
g.set_xlabels('Sexo')
g.set_ylabels('Total Factura')
# rotamos las etiquetas
g.set_xticklabels(rotation=90)
plt.show()