Introducción a los gráficos de datos en Python con Matplotlib

Títulos, etiquetas y leyendas

Sigamos con el ejemplo de los ahorros y vamos a utilizarlo para aprender a personalizar nuestros gráficos, añadiéndoles títulos, etiquetas y leyendas.

Podríamos añadir a nuestro gráfico el titulo "Ahorros del primer semestre" y unas etiquetas para los eje X e Y con "Meses" y "Cantidad en €" respectivamente.

Para ello utilizaremos los métodos:

  • plt.title("Título")
  • plt.xlabel("Etiqueta horizontal")
  • plt.ylabel("Etiqueta vertical")
# %%
import numpy as np
import matplotlib.pyplot as plt

ahorros = np.random.randint(100, size=[6])
meses = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio']
mapeado = range(len(meses))

plt.plot(ahorros)                         # Añadimos el gráfico
plt.xticks(mapeado, meses)                # Mapeamos los valores horizontales
plt.xlim(2, 4)                            # Configuramos el límite horizontal
plt.title("Ahorros del primer semestre")  # Configuramos el título
plt.xlabel("Meses")                       # Configuramos la etiqueta del eje X
plt.ylabel("Cantidad en €")               # Configuramos la etiqueta del eje Y
plt.show()                                # Finalmente lo mostramos

El otro elemento informativo que podemos añadir son las leyendas utilizando:

  • plt.legend(LOCALIZACION)

Podemos elegir optativamente una localización a partir de las distintas opciones que nos indican en la documentación de matplotlib y que os dejaré recopiladas abajo en los apuntes:

  • 'best' => 0
  • 'upper right' => 1
  • 'upper left' => 2
  • 'lower left' => 3
  • 'lower right' => 4
  • 'right' => 5
  • 'center left' => 6
  • 'center right' => 7
  • 'lower center' => 8
  • 'upper center' => 9
  • 'center' => 10

Por defecto se usa la opción 0 para detectar automáticamente el mejor sitio donde poner la leyenda:

# %%
# Mostramos una leyenda
plt.plot(ahorros)                         # Añadimos el gráfico
plt.xticks(mapeado, meses)                # Mapeamos los valores horizontales
plt.xlim(2, 4)                            # Configuramos el límite horizontal
plt.title("Ahorros del primer semestre")  # Configuramos el título
plt.xlabel("Meses")                       # Configuramos la etiqueta del eje X
plt.ylabel("Cantidad en €")               # Configuramos la etiqueta del eje Y
plt.legend(loc=4)                         # Mostramos la leyenda
plt.show()                                # Finalmente lo mostramos

Veréis que nos aparece un cuadradito pero no muestra nada, eso es porque tenemos que configurar el texto para del gráfico, algo que definiremos con la propiedad label al usar plot():

# %%
# Mostramos una leyenda con un texto
plt.plot(ahorros, label="Evolución")      # Añadimos el gráfico con un texto
plt.xticks(mapeado, meses)                # Mapeamos los valores horizontales
plt.xlim(2, 4)                            # Configuramos el límite horizontal
plt.title("Ahorros del primer semestre")  # Configuramos el título
plt.xlabel("Meses")                       # Configuramos la etiqueta del eje X
plt.ylabel("Cantidad en €")               # Configuramos la etiqueta del eje Y
plt.legend()                              # Mostramos la leyenda automáticamente
plt.show()                                # Finalmente lo mostramos

En este escenario donde dibujamos un único vector de datos una leyenda no tiene mucho sentido, pero si en lugar de uno tubiéramos por ejemplo tres vectores representando los ahorros de tres personas la cosa cambiaría:

# %%
# Mostramos los ahorros de tres personas diferentes
import numpy as np
import matplotlib.pyplot as plt

meses = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio']
mapeado = range(len(meses))

plt.plot(np.random.randint(100, size=[6]), label="Pedro")
plt.plot(np.random.randint(100, size=[6]), label="Marta")
plt.plot(np.random.randint(100, size=[6]), label="Ana")
plt.xticks(mapeado, meses)
plt.xlim(2, 4)
plt.title("Ahorros del primer semestre")
plt.xlabel("Meses")
plt.ylabel("Cantidad en €")
plt.legend()
plt.show()

Esto que acabamos de hacer se denomina visualización de múltiples series, representando cada serie una de las líneas del gráfico.

Con esto que sabemos y un poco de comprensión de listas podemos hacer otro ejemplo muy rápidamente para dibujar las tablas de multiplicas del 1 al 10:

# %%
# Tablas de multiplicar del 1 al 10
for t in range(1, 11):
    plt.plot(
        range(1, 11),                   # Eje X
        [t * n for n in range(1, 11)],  # Eje Y
        label=f"Tabla del {t}"          # Leyenda
    )
plt.title('Tablas')
plt.xlabel('Número')
plt.ylabel('Resultado')
plt.legend()
plt.show()

Para que luego digan que Python no mola...