Publicado el: 11 de Diciembre del 2020 - Jhonatan Montilla
En esta publicación se mostrarán las maneras más simples de personalizar los gráficos para hacerlos más agradables estéticamente, esperamos que estos sencillos trucos le ayuden a elaborar gráficos más llamativos y le ahorre tiempo en ajustar gráficos individuales. Se utilizará el conjunto de datos integrado en la librería de Seaborn sobre pingüinos.
A continuación se cargan las librerías y el conjunto de datos.
import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset('penguins').rename(columns={'sex': 'gender'})
df.head()
species | island | bill_length_mm | bill_depth_mm | flipper_length_mm | body_mass_g | gender | |
---|---|---|---|---|---|---|---|
0 | Adelie | Torgersen | 39.1 | 18.7 | 181.0 | 3750.0 | Male |
1 | Adelie | Torgersen | 39.5 | 17.4 | 186.0 | 3800.0 | Female |
2 | Adelie | Torgersen | 40.3 | 18.0 | 195.0 | 3250.0 | Female |
3 | Adelie | Torgersen | NaN | NaN | NaN | NaN | NaN |
4 | Adelie | Torgersen | 36.7 | 19.3 | 193.0 | 3450.0 | Female |
A continuación se construirá un diagrama de dispersión estándar con configuración de gráfico predeterminada:
sns.scatterplot(data=df, x='body_mass_g', y='bill_length_mm',
alpha=0.7, hue='species', size='gender')
<AxesSubplot:xlabel='body_mass_g', ylabel='bill_length_mm'>
El gráfico anterior se encuentra elaborado con las opciones que vienen por defecto en la librería Seaborn, posteriormente se realizarán cambios personalizados del mismo para obtener la visual que se necesite.
Los dos primeros ajustes se realizarán para gráficos individuales, posteriormente en los cuatro ajustes restantes serán realizados para cambiar la configuración predeterminada de todos los gráficos a la vez.
¿Observó una la salida de texto justo encima del gráfico anterior?, Una manera sencilla de suprimir esta salida de texto es usar ; al final del código.
sns.scatterplot(data=df, x='body_mass_g', y='bill_length_mm',
alpha=0.7, hue='species', size='gender'); # Uso de ; para suprimir texto de salida
Agregando ; al final del código se obtiene una salida más limpia.
Los gráficos pueden mejorar al cambiar su tamaño de la siguiente manera:
plt.figure(figsize=(9, 5))
sns.scatterplot(data=df, x='body_mass_g', y='bill_length_mm',
alpha=0.7, hue='species', size='gender');
Al modificar el tamaño, la leyenda se movió a la esquina superior izquierda.
plt.figure(figsize=(9, 5))
sns.scatterplot(data=df, x='body_mass_g', y='bill_length_mm',
alpha=0.7, hue='species', size='gender')
plt.legend(loc='upper right', bbox_to_anchor=(1.2, 1));
Es lógico preguntarse cómo saber qué combinaciones de números utilizar para la función figsize() ó bbox_to_anchor() para obtener un mejor ajuste, sin embargo, será necesario intentar por ensayo y error qué números funcionan mejor para la gráfica.
Esta función permite cambiar el estilo general de los gráficos, en caso de no ajustarse el estilo predeterminado a lo requerido, esto incluye aspectos como la estética, los colores, el fondo, o la representación de los ejes.
Se procederá a cambiar el estilo a whitegrid para cambiar la apariencia del gráfico:
sns.set_style('whitegrid') # Cambia el estilo predeterminado
plt.figure(figsize=(9, 5))
sns.scatterplot(data=df, x='body_mass_g', y='bill_length_mm',
alpha=0.7, hue='species', size='gender')
plt.legend(loc='upper right', bbox_to_anchor=(1.2, 1));
Existen otras opciones para probar tales como: "darkgrid", "dark" y "ticks".
En ocaciones, los tamaños de las etiquetas aparecen bastante pequeños en el gráfico, con la función sns.set_context (), se pueden cambiar los parámetros de la configuración predeterminada, esta función permite principalmente controlar el tamaño de la fuente predeterminada para las etiquetas en gráficos, al cambiar el valor predeterminado, se puede ahorrar tiempo al no tener que ajustar el tamaño de fuente para los diferentes elementos (por ejemplo, etiqueta de eje, título, leyenda) de gráficos individuales.
sns.set_context('talk') # Cambiar el contexto predeterminado
plt.figure(figsize=(9, 5))
sns.scatterplot(data=df, x='body_mass_g', y='bill_length_mm',
alpha=0.7, hue='species', size='gender')
plt.legend(loc='upper right', bbox_to_anchor=(1.3, 1));
Otra opción para probar es: "póster" que aumentará aún más el tamaño predeterminado.
Si alguna vez desea personalizar la paleta de colores predeterminada con sus combinaciones de colores preferidas, esta función es bastante útil, se pueden utilizar mapas de colores de Matplotlib, existen varias listas de mapas de colores de Matplotlib para elegir.
A continuación a manera de ejemplo se cambiará la paleta de colores a "arcoíris":
sns.set_palette('rainbow') # Cambiar paleta predeterminada
plt.figure(figsize=(9, 5))
sns.scatterplot(data=df, x='body_mass_g', y='bill_length_mm',
alpha=0.7, hue='species', size='gender')
plt.legend(loc='upper right', bbox_to_anchor=(1.3, 1));
Si no puede encontrar un mapa de colores de Matplotlib que se ajuste a su requerimiento, puede elegir colores a individualmente para crear su propia paleta de colores.
Una manera de crear su propia paleta de colores es pasar una lista de nombres de colores a la función como se muestra a continuación.
sns.set_palette(['green', 'purple', 'red']) # Cambiar paleta predeterminada
plt.figure(figsize=(9, 5))
sns.scatterplot(data=df, x='body_mass_g', y='bill_length_mm',
alpha=0.7, hue='species', size='gender')
plt.legend(loc='upper right', bbox_to_anchor=(1.3, 1));
Si los nombres de los colores no capturan lo que necesita, puede crear su propia paleta identificando colores de manera hexadecimal para acceder a una gama más amplia de opciones (¡más de 16 millones de colores!), este es un recurso bastante útil para encontrar una paleta de colores personalizada como se muestra a continuación:
sns.set_palette(['#62C370', '#FFD166', '#EF476F']) # Cambiar paleta predeterminada
plt.figure(figsize=(9, 5))
sns.scatterplot(data=df, x='body_mass_g', y='bill_length_mm',
alpha=0.7, hue='species', size='gender')
plt.legend(loc='upper right', bbox_to_anchor=(1.3, 1));
De los tres ajustes anteriores, espero que pueda encontrar su combinación favorita (en algunos casos, podrá dejar la predeterminada como está). Si tiene que actualizar la configuración predeterminada de gráficos, es mejor hacerlo inmediatamente después de importar los paquetes de visualización. Esto significa que deberá colocar un fragmento como este al comienzo del script:
# Cambiar valores predeterminados
sns.set_style('whitegrid')
sns.set_context('talk')
sns.set_palette('rainbow')
Ya para cerrar, la actualización de múltiples valores predeterminados como el anterior se pueden hacer de manera más resumida con la función sns.set(). Está es la versión resumida del mismo código:
sns.set(style='whitegrid', context='talk', palette='rainbow')