text
y figtext
Es posible agregar textos sobre los gráficos de matplotlib utilizando las funciones text
y figtext
. La principal diferencia entre estas dos funciones es que la primera se utiliza para agregar textos dentro del gráfico mientras que la segunda se puede utilizar para agregar textos a la figura.
Agregar un texto
La función text
necesita al menos tres parámetros: las coordenadas (x, y) y el texto deseado, como se muestra en el ejemplo siguiente.
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(np.sin(np.linspace(0, 10)))
plt.text(20, 0.5, 'Texto') # Coordenadas y texto
# plt.show()
Posición en base a los ejes
Una alternativa a posicionar los textos por coordenadas es posicionar los textos de manera relativa a los ejes en escala 0 a 1 con transform = ax.transAxes
.
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(np.sin(np.linspace(0, 10)))
plt.text(0.5, 0.5, 'Centro', transform = ax.transAxes)
plt.text(0.05, 0.05, 'Abajo-izquierda', transform = ax.transAxes)
plt.text(0.8, 0.85, 'Arriba-derecha', transform = ax.transAxes)
plt.text(0.8, 0.05, 'Abajo-derecha', transform = ax.transAxes)
plt.text(0.05, 0.85, 'Arriba-izquierda', transform = ax.transAxes)
# plt.show()
En las siguientes subsecciones se muestran algunas de las personalizaciones más habituales, pero recuerda leer la documentación de la función para obtener información sobre ajustes más avanzados.
Color
Con el argumento color
se puede cambiar el color por defecto pasando el color deseado.
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(np.sin(np.linspace(0, 10)))
plt.text(20, 0.5, 'Texto', color = "green")
# plt.show()
Tamaño de la fuente
Si la letra es demasiado grande o demasiado pequeña se puede ajustar el tamaño con el argumento fontsize
.
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(np.sin(np.linspace(0, 10)))
plt.text(20, 0.5, 'Texto', fontsize = 16)
# plt.show()
Alineación del texto
La función text
permite ajustar la alineación tanto vertical como horizontalmente con los argumentos verticalalignment
o va
(que puede tomar los valores 'center'
, 'top'
, 'bottom'
, 'baseline'
o 'center_baseline'
) y horizontalalignment
o ha
(que puede tomar los valores 'center'
, 'right'
o 'left'
), respectivamente.
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(np.sin(np.linspace(0, 10)))
plt.text(20, 0.5, 'Texto',
verticalalignment = 'bottom',
horizontalalignment = 'right')
# plt.show()
Rotación del texto
El argumento rotation
permite especificar el ángulo de inclinación del texto o establecerlo como vertical (vertical
) u horizontal (horizontal
).
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(np.sin(np.linspace(0, 10)))
plt.text(20, 0.5, 'Texto', rotation = 45)
# plt.show()
Texto dentro de una caja
Pasando un diccionario al argumento bbox
de la función text
se puede crear un texto dentro de una caja, como en el ejemplo siguiente.
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(np.sin(np.linspace(0, 10)))
plt.text(20, 0.5, 'Texto', bbox = {'facecolor': 'oldlace', 'alpha': 0.5, 'pad': 8})
# plt.show()
Además, es posible personalizar el estilo de la caja con el elemento boxstyle
del diccionario, tal y como se puede ver en el siguiente bloque de código.
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(np.sin(np.linspace(0, 10)))
plt.text(20, 0.5, 'Texto dentro de una caja', bbox = {'facecolor': 'oldlace', 'alpha': 0.5, 'boxstyle': "rarrow,pad=0.3", 'ec': 'red'})
# plt.show()
En los ejemplos anteriores utilizamos el estilo rarrow
. La imagen siguiente muestra todos los posibles estilos junto con sus parámetros por defecto.
Texto en una figura
Similar a la anterior función, la función figtext
puede ser usada para agregar textos a la figura. Recuerda que es posible personalizar el texto de la misma manera que en la sección anterior. Lee la documentación para obtener más información.
En este ejemplo situamos el texto en la parte central superior de la figura y centramos el texto horizontalmente con el argumento ha
.
import numpy as np
import matplotlib.pyplot as plt
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.plot(np.sin(np.linspace(0, 10)))
ax2.plot(np.sin(np.linspace(0, 10)))
plt.figtext(0.5, 0.9, 'Texto de la figura', ha = "center")
# plt.show()
annotate
Las anotaciones son similares a los textos, pero la función annotate
proporciona argumentos adicionales para hacer anotaciones en partes específicas de un gráfico con flechas. Si no quieres utilizar flechas probablemente tu mejor opción es utilizar la función text
.
Para agregar anotaciones de texto a un gráfico de matplotlib tendrás que establecer al menos, el texto, las coordenadas del gráfico que quieres destacar marcado con la flecha (xy
), las coordenadas del texto (xytext
) y las propiedades de la flecha (arrowprops
).
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(np.sin(np.linspace(0, 10)))
plt.annotate('Mínimo',
xy = (23, -0.95),
xytext = (23, 0.25),
arrowprops = dict(facecolor = 'black', width = 0.2, headwidth = 8),
horizontalalignment = 'center')
# plt.show()
Las coordenadas del ejemplo anterior son las coordenadas de los datos, pero la función annotate
permite especificar diferentes sistemas de coordenadas, tanto para la flecha como para el texto con xycoords
y textcoords
, respectivamente. Las posibles opciones son 'figure points'
, 'figure pixels'
, 'figure fraction'
, 'axes points'
, 'axes pixels'
, 'axes fraction'
y 'data'
, entre otras. Revisa la documentación de la función para obtener más detalles.
Flecha sin texto
Si solo quieres agregar una flecha sin texto tan solo tendrás que dejar vacío el texto y se creará únicamente la flecha.
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot(np.sin(np.linspace(0, 10)))
plt.annotate('',
xy = (23, -0.95),
xytext = (23, 0.25),
arrowprops = dict(facecolor = 'red', width = 0.4, headwidth = 8))
# plt.show()
También te puede interesar