HOWTO · Matplotlib
Fórmulas de látex em Matplotlib
Este tutorial explica como podemos renderizar as fórmulas ou equações de LaTex em Matplotlib.
Nesta página
O Matplotlib pode compor expressões matemáticas em títulos, rótulos dos eixos, legendas e anotações. Seu mathtext integrado processa muitas fórmulas comuns sem exigir uma instalação separada de TeX. Para compor documentos com recursos mais amplos de LaTeX, ative o renderizador externo com text.usetex; essa opção exige dependências adicionais do sistema. Os exemplos a seguir usam mathtext, salvo indicação em contrário.
Renderizar texto matemático no Matplotlib
Coloque a expressão matemática entre cifrões e use uma string raw do Python, prefixada com r, para que as barras invertidas cheguem intactas ao analisador matemático. Isso é útil para comandos como \sin e para símbolos gregos. Também é possível combinar texto comum e uma expressão matemática no mesmo rótulo. O mathtext vem ativado por padrão e cobre notações comuns, como frações, índices inferiores e superiores e muitos símbolos; ele não implementa todos os pacotes ou comandos de LaTeX.
Execute este exemplo para desenhar uma curva seno com uma fórmula no rótulo do eixo y e na legenda:
O código e os rótulos ou saídas exibidos nesta seção permanecem em 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()
A curva seno usa o mathtext integrado do Matplotlib; os dados do gráfico e os rótulos com fórmulas continuam disponíveis no código acima.
Os dados cobrem um período completo, de 0 a 2π, e np.sin(x) fornece os valores de y. A string raw mantém intacta a barra invertida em \sin. Os cifrões delimitam a parte matemática do rótulo; sem eles, o Matplotlib interpreta o texto como caracteres comuns. Se uma fórmula não for renderizada, confira se os delimitadores estão emparelhados e se o mathtext oferece suporte a cada comando.
Ativar a renderização externa de LaTeX
Escolha a renderização externa quando precisar de recursos de LaTeX que vão além do mathtext ou quiser que o texto do gráfico siga a tipografia TeX de um documento. Defina text.usetex antes de criar a figura. Por exemplo, plt.rcParams["text.usetex"] = True ativa a opção para as figuras criadas em seguida; volte a defini-la como False quando quiser usar mathtext novamente. A alternativa com escopo limitado é envolver o código do gráfico em plt.rc_context({"text.usetex": True}).
A renderização externa exige uma instalação compatível de LaTeX e os programas auxiliares necessários ao Matplotlib, incluindo dvipng e, dependendo da plataforma e do formato de saída, Ghostscript. Instale pacotes compatíveis com seu sistema operacional e deixe os executáveis disponíveis em PATH. Os nomes exatos dos pacotes e os requisitos podem variar conforme a plataforma e a configuração do Matplotlib; se a renderização falhar, consulte a mensagem de erro e a documentação da versão instalada do Matplotlib. Um executável ausente, um pacote ou comando sem suporte, ou um erro de compilação do TeX pode impedir a renderização do texto da figura. Não ative essa opção apenas para exibir equações comuns: o mathtext dispensa essas dependências externas.
Para consultar os requisitos e as instruções oficiais de configuração, veja a documentação do Matplotlib sobre como usar LaTeX para formatar texto. Considere as diferenças entre plataformas e formatos de saída, pois os programas auxiliares necessários variam conforme o ambiente.
Essa configuração altera a maneira como o Matplotlib renderiza o texto, mas não modifica as strings do Python. Mantenha as expressões matemáticas em strings raw com delimitadores de cifrão e teste rótulos representativos no ambiente que produzirá a figura final. Este artigo não presume uma versão específica de LaTeX ou Ghostscript.
Usar letras gregas e outros símbolos
O mathtext reconhece comandos para letras gregas e a sintaxe de sobrescrito dentro dos delimitadores de cifrão. Por exemplo, r"$\alpha^2$" exibe alfa ao quadrado. Use a mesma forma em rótulos e itens de legenda; deixe fora dos delimitadores as palavras explicativas que não fazem parte da notação matemática.
Este exemplo compara α, α² e α³ e usa alfa no eixo horizontal:
O código e os rótulos ou saídas exibidos nesta seção permanecem em 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()
A legenda mostra as três potências em mathtext; o código e os valores das curvas podem ser consultados acima.
O mathtext do Matplotlib inclui muitos símbolos comuns, mas seu conjunto de comandos difere do disponível em uma instalação completa de LaTeX. Se um comando não tiver suporte, simplifique a expressão para usar recursos compatíveis com mathtext ou recorra à renderização externa quando a notação exigir recursos de LaTeX. Mantenha cada expressão completa entre um único par de cifrões para que o analisador possa distinguir a matemática do texto comum dos rótulos.
Personalizar o texto matemático e adicionar anotações
Defina o tamanho do texto de cada elemento com argumentos como fontsize=14 em ax.set_title, ax.set_xlabel ou ax.set_ylabel. Para aplicar um estilo consistente ao gráfico inteiro, use as configurações font.size, axes.titlesize e axes.labelsize do Matplotlib por meio de plt.rcParams; por exemplo, plt.rcParams["font.size"] = 12 altera o tamanho base do texto. Para solicitar uma família serifada, use plt.rcParams["font.family"] = "serif". A disponibilidade das fontes varia conforme o computador, e a renderização externa de LaTeX tem sua própria configuração de fontes; por isso, confira a figura renderizada no tamanho final.
Use ax.annotate para posicionar uma nota em uma coordenada dos dados e, se quiser, desenhar uma seta até esse ponto. O máximo de uma curva seno fica aproximadamente em (np.pi / 2, 1). Passe essa coordenada em xy, escolha outra posição em xytext para a nota e adicione uma seta com arrowprops={"arrowstyle": "->"}. O texto da anotação pode combinar prosa e matemática, por exemplo, r"Peak: $\sin(x)=1$". Assim, o rótulo permanece legível e aponta para a característica descrita.
Tanto o mathtext quanto a renderização externa de LaTeX formatam o texto da figura; nenhum dos dois altera os dados numéricos subjacentes. Sempre que possível, escreva descrições e unidades como texto comum, reserve os delimitadores matemáticos para a notação e use fórmulas concisas nas legendas para facilitar a leitura. Se o gráfico precisar corresponder exatamente à tipografia de uma publicação, confira-o com as mesmas fontes, o mesmo renderizador e o mesmo formato de saída usados no documento final.