HOWTO · Matplotlib
Fórmulas de látex en Matplotlib
Este tutorial explica cómo podemos representar las fórmulas o ecuaciones de LaTex en Matplotlib.
En esta página
Matplotlib puede componer expresiones matemáticas en títulos, etiquetas de ejes, leyendas y anotaciones. Su mathtext integrado admite muchas fórmulas habituales sin necesidad de instalar TeX por separado. Para componer documentos LaTeX con funciones más amplias, activa el renderizador externo con text.usetex; esta opción requiere dependencias adicionales del sistema. Salvo que se indique lo contrario, los ejemplos siguientes usan mathtext.
Representar texto matemático en Matplotlib
Delimita la expresión matemática con signos de dólar y usa una cadena sin procesar de Python, precedida por r, para que las barras invertidas lleguen intactas al analizador matemático. Esto resulta útil para comandos como \sin y para los símbolos griegos. Puedes combinar texto normal y una expresión matemática en una misma etiqueta. Mathtext está habilitado de forma predeterminada y admite notación habitual, como fracciones, subíndices, superíndices y muchos símbolos; no implementa todos los paquetes ni comandos de LaTeX.
Ejecuta este ejemplo para trazar una curva sinusoidal con una fórmula en la etiqueta del eje y y en la leyenda:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, y, label=r"$\sin(x)$")
ax.set_xlabel("x")
ax.set_ylabel(r"$\sin(x)$")
ax.set_title("Sine curve with mathtext")
ax.legend()
fig.tight_layout()
plt.show()
La curva sinusoidal usa el mathtext integrado de Matplotlib; los datos trazados y las etiquetas con fórmulas se pueden consultar en el código anterior.
Los datos abarcan un período completo, de 0 a 2π, y np.sin(x) proporciona los valores de y. La cadena sin procesar mantiene intacta la barra invertida de \sin. Los signos de dólar delimitan la parte matemática de la etiqueta; sin ellos, Matplotlib interpreta el texto como caracteres normales. Si una fórmula no se representa, comprueba que los delimitadores estén emparejados y que mathtext admita cada comando.
Habilitar el renderizado externo de LaTeX
Elige el renderizado externo si necesitas funciones de LaTeX que mathtext no ofrece o quieres que el texto del gráfico siga la tipografía de un documento compuesto con TeX. Configura text.usetex antes de crear la figura. Por ejemplo, plt.rcParams["text.usetex"] = True lo habilita para las figuras que crees a continuación; vuelve a establecer el valor en False cuando quieras usar mathtext. También puedes limitar su alcance con plt.rc_context({"text.usetex": True}) alrededor del código del gráfico.
El renderizado externo requiere una instalación compatible de LaTeX y los programas auxiliares que necesita Matplotlib, incluidos dvipng y, según la plataforma y la ruta de salida, Ghostscript. Instala paquetes compatibles con tu sistema operativo y asegúrate de que sus ejecutables estén disponibles en PATH. Los nombres exactos de los paquetes y los requisitos pueden variar según la plataforma y la configuración de Matplotlib. Si falla el renderizado, consulta el mensaje de error y la documentación de la versión de Matplotlib que tengas instalada. La falta de un ejecutable, un paquete o comando no compatible, o un error de compilación de TeX pueden impedir que se represente el texto de la figura. No actives esta opción solo para mostrar ecuaciones habituales: mathtext evita esas dependencias externas.
Para consultar los detalles oficiales sobre dependencias y configuración, visita la documentación de Matplotlib sobre el uso de LaTeX para dar formato al texto. Ten en cuenta las condiciones de la plataforma y de la ruta de salida, ya que los programas auxiliares necesarios varían según el entorno.
La configuración cambia la forma en que Matplotlib representa el texto, pero no modifica las cadenas de Python. Mantén las expresiones matemáticas en cadenas sin procesar y con delimitadores de dólar, y prueba etiquetas representativas en el entorno que generará la figura final. Este artículo no presupone una versión concreta de LaTeX ni de Ghostscript.
Usar letras griegas y otros símbolos
Mathtext reconoce comandos para letras griegas y la sintaxis de superíndices dentro de los delimitadores de dólar. Por ejemplo, r"$\alpha^2$" muestra alfa al cuadrado. Usa el mismo formato en las etiquetas y en las entradas de la leyenda; deja fuera de los delimitadores las palabras explicativas que no formen parte de la notación matemática.
Este ejemplo compara α, α² y α³, y utiliza alfa en el eje horizontal:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
import numpy as np
import matplotlib.pyplot as plt
alpha = np.linspace(0, 10, 100)
fig, ax = plt.subplots()
ax.plot(alpha, alpha, label=r"$\alpha$")
ax.plot(alpha, alpha ** 2, label=r"$\alpha^2$")
ax.plot(alpha, alpha ** 3, label=r"$\alpha^3$")
ax.set_xlabel(r"$\alpha$")
ax.set_ylabel("Value")
ax.set_title("Greek letters and superscripts")
ax.legend()
fig.tight_layout()
plt.show()
La leyenda muestra las tres potencias con mathtext; el código y los valores de las curvas se pueden consultar arriba.
El mathtext de Matplotlib incluye muchos símbolos habituales, pero su conjunto de comandos difiere del de una instalación completa de LaTeX. Si un comando no es compatible, simplifica la expresión para usar mathtext compatible o recurre al renderizado externo cuando la notación requiera funciones de LaTeX. Delimita cada expresión completa con un único par de signos de dólar para que el analizador pueda distinguir las matemáticas del texto normal de las etiquetas.
Personalizar el texto matemático y añadir anotaciones
Ajusta el tamaño del texto de cada elemento con argumentos como fontsize=14 en ax.set_title, ax.set_xlabel o ax.set_ylabel. Para aplicar un estilo uniforme a todo el gráfico, configura font.size, axes.titlesize y axes.labelsize de Matplotlib mediante plt.rcParams; por ejemplo, plt.rcParams["font.size"] = 12 cambia el tamaño base del texto. Puedes solicitar una familia tipográfica serif con plt.rcParams["font.family"] = "serif". La disponibilidad de fuentes depende del equipo, y el renderizado externo de LaTeX tiene su propia configuración tipográfica; revisa la figura renderizada al tamaño final.
Usa ax.annotate para colocar una nota en una coordenada de los datos y, si quieres, dibuja una flecha hacia ese punto. El máximo de una función sinusoidal se encuentra aproximadamente en (np.pi / 2, 1). Pasa esa ubicación en xy, elige otra ubicación para la nota en xytext y añade una flecha con arrowprops={"arrowstyle": "->"}. El texto de la anotación puede combinar prosa y matemáticas; por ejemplo, r"Peak: $\sin(x)=1$". Así, la etiqueta sigue siendo legible y apunta al elemento que describe.
Tanto mathtext como el renderizado externo de LaTeX componen el texto de la figura; ninguno modifica los datos numéricos subyacentes. Siempre que sea posible, expresa las descripciones y las unidades con texto normal, reserva los delimitadores matemáticos para la notación y usa fórmulas breves en las leyendas para facilitar su lectura. Si un gráfico debe ajustarse exactamente a la tipografía de una publicación, compruébalo con las mismas fuentes, el mismo renderizador y el mismo formato de salida que se usarán en el documento final.