12.1 Añadir texto al gráfico

Todo gráfico debe tener claramente establecidas las unidades o la identificación de los valores en los ejes x y y, un título y una aclaración acerca de la fuente de los datos. Además, se pueden añadir otro tipo de textos tales como flechas y anotaciones acerca de datos resaltables.

El siguiente código presenta cómo desarrollar estos:

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot()
# fig.subplots_adjust(top=0.85)

# Set titles for the figure and the subplot respectively
###fig.suptitle('Titulo general', fontsize=14, fontweight='bold')
_ = ax.set_title('Titulo')
_ = ax.set_xlabel('Etiqueta del eje x')
_ = ax.set_ylabel('Etiqueta del eje y')
_ = ax.axis([0, 10, 0, 10])
_ = ax.plot([1], [7], 'o')
_ = ax.annotate(text = 'Anotación respecto a ciertas coordenadas, con flecha', 
            xy = (1, 7), 
            xytext = (2, 8),
            arrowprops = dict(facecolor = 'black', shrink = 0.85))
_ = ax.text(2, 6, 'Anotación tipo ecuación: $y = 3 + 6x + 2x^2 + \epsilon$, con color', fontsize = 10, color='green')
# Etiqueta de anotación en ciertas coordenadas, con caja.
_ = ax.text(3.5, 2, 'Anotación con caja alineada\ncentradamente respecto a la coordenada.', 
        style = 'italic', 
        verticalalignment = 'bottom', horizontalalignment = 'center',
        bbox={'facecolor': 'blue', 'alpha': 0.2, 'pad': 10})

La flecha se realiza mediante el atributo/diccionario de arrowprops= dentro del método annotate(), la cual inicia en las coordenadas del xytext y termina en la punta de flecha en las coordenadas xy. El texto también se ubica en la coordenadas xytext. Si no se añade arrowprops= basta con las coordenadas xy, que hacen referencia la ubicación del texto. Otros atributos del diccionario de arrowprops= son: {“width”: 6,“headwidth”: 20, ‘headlength’: 20}. shrink es la fracción a contraer respecto a la longitud que demarcan las coordenadas.

annotate() admite argumentos tales como: horizontalalignment = ‘center’, fontsize = 15

Una opción, para colocar sólo la flecha es plt.arrow(), función que exige cuatro parámetros: el par de coordenadas de salida y el par de llegada: plt.arrow(2, 4, 4, 6, width = 0.3). Permite parámetros adicionales tales como: edgecolor = ‘green’, facecolor = ‘red’, linestyle = ‘–’, linewidth = 3.

Si hubiera dos gráficas, se puede colocar un título común mediante fig.suptitle():

x = [2016,2017,2018,2019,2020,2021]
y = [45,46,47,48,49,49.5]
fig, ax = plt.subplots(1, 2, sharey=True)
_ = ax[0].plot(x, y)
_ = ax[1].scatter(x, y)
_ = fig.suptitle('Título común', fontsize = 12, fontweight = 'bold')
_ = ax[0].set_title('Titulo izquierda', fontsize = '10')
_ = ax[1].set_title('Título derecha', fontsize = '10')

La práctica es la única alternativa para aprender tal profusión de términos nuevos.

Ejercicio

Explore https://matplotlib.org/stable/gallery/index.html e imite alguna gráfica, personalizándola.