6.2. LaTeX - формулы

Формулы могут помещаться как в заголовки, так и внутрь самой области Axes с помощью метода Axes.text(), который мы рассмотрим чуть позже. Matplotlib имеет внутренний движок и все необходимое для отображения формул, так что формулы доступны прямо "из коробки".

Математический текст передается в виде строки, начало и конец которого обозначаются символом $. При этом мы должны использовать необработанные строки, т.е. ставить символ r перед открывающей строку кавычкой - это необходимо для того что бы символы \ в математическом тексте не интерпретировались как часть специальных строковых символов, таких как \n.

Давайте добавим заголовок к графику в виде формулы:

import numpy as np
import matplotlib.pyplot as plt


mu, sigma = 1.1, 2.9
data = np.random.normal(mu, sigma, 10000)

fig, ax = plt.subplots()

ax.hist(data, bins = 50, rwidth = 0.4)

ax.set_title(r'$p(x)=\frac{1}{\sqrt{2\pi\sigma^{2}}}e^{-\frac{(x-\mu)^{2}}{2\sigma^{2}}}$')

plt.show()

Matplotlib latex формулы

Но как видите, такое отображение никуда не годится, давайте увеличим размер заголовка и приподнимем его над Axes:

import numpy as np
import matplotlib.pyplot as plt

mu, sigma = 1.1, 2.9
data = np.random.normal(mu, sigma, 10000)

fig, ax = plt.subplots()

ax.hist(data, bins = 50, rwidth = 0.4)

ax.set_title(r'$p(x)=\frac{1}{\sqrt{2\pi\sigma^{2}}}e^{-\frac{(x-\mu)^{2}}{2\sigma^{2}}}$',
             fontsize = 20,    #  увеличиваем размер
             pad = 20)    #  приподнимаем над "Axes"

plt.show()

Matplotlib latex: размер и выравнивание

Вы можете конкатенировать математический и обычный текст, а так же вставлять символы переноса:

import numpy as np
import matplotlib.pyplot as plt

mu, sigma = 1.1, 2.9
data = np.random.normal(mu, sigma, 10000)



fig, ax = plt.subplots()

ax.hist(data, bins = 50, rwidth = 0.4)

ax.set_title(r'$p(x)=\frac{1}{\sqrt{2\pi\sigma^{2}}}e^{-\frac{(x-\mu)^{2}}{2\sigma^{2}}}$'+
             '\n при '+r'$\sigma = 1.1$' + ' и ' + r'$\mu = 2.9$',
             fontsize = 20,    #  увеличиваем размер
             pad = 20)    #  приподнимаем над "Axes"


plt.show()

Matplotlib latex: форматирование текста

Математический текст может быть помещен внутрь самой области Axes методом Axes.text():

import numpy as np
import matplotlib.pyplot as plt

mu, sigma = 1.1, 2.9
data = np.random.normal(mu, sigma, 10000)

fig, ax = plt.subplots()

ax.hist(data, bins = 50, rwidth = 0.4)
ax.text(x = 4, y = 500, s = r'$\frac{1}{\sqrt{2\pi\sigma^{2}}}e^{-\frac{(x-\mu)^{2}}{2\sigma^{2}}}$',
        fontsize = 20)

plt.show()

Matplotlib latex формулы внутри области Axes