Curso de introducción a la programación con Python¶

    Autor: Luis Fernando Apáez Álvarez
    -Curso PyM-
    Clase 3: Librería Seaborn (Parte III)
    Fecha: 08 de diciembre del 2022


Contenido¶

  • Personalización de gráficos
    • Estilo de graficación y colores
    • Títulos y etiquetas

Continuamos con las clases en las que abordamos temas sobre visualizaciones con seaborn.

Personalización de gráficos ¶

Estilo de graficación y colores¶

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

In [1]:
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()
Out[1]:
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
In [2]:
# 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

In [3]:
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.

In [4]:
# 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')
In [5]:
# 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:

In [6]:
# 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()

In [7]:
# posibles valores:
# paper, notebook, talk, poster
sns.set_context('paper')

ax = sns.catplot(data=df_tips, 
            x='sex',
            y='total_bill',
            kind='bar')
In [8]:
# posibles valores:
# paper, notebook, talk, poster
sns.set_context('talk')

ax = sns.catplot(data=df_tips, 
            x='sex',
            y='total_bill',
            kind='bar')

Títulos y etiquetas¶

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:

In [10]:
type(ax)
Out[10]:
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

In [12]:
g = sns.scatterplot(data=df_tips, x='tip', y='total_bill')
In [13]:
type(g)
Out[13]:
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

In [16]:
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

In [20]:
# 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

In [25]:
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:

In [28]:
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'

In [31]:
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

In [37]:
# 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:

In [39]:
# 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

In [44]:
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()
In [45]:
# 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()