\ text не работает на метке matplotlib

Я использую matplotlib вместе с латексными ярлыками для меток оси, заголовка и цветаbar

В то время как он работает очень хорошо в большинстве случаев, он имеет некоторые проблемы, когда у вас есть формула с использованием \text.

Один очень простой пример.

from matplotlib import pyplot as plt
plt.plot([1,2,3])
plt.title(r"$f_{\text{cor, r}}$")

plt.show()

Это приведет к сообщению об ошибке, например:

IPython/core/formatters.py:239: FormatterWarning: Exception in image/png formatter: 
f_{\text{1cor, r}}
   ^
Unknown symbol: \text (at char 3), (line:1, col:4)
  FormatterWarning,

Есть ли простой способ использовать \text там?

Ответы

Ответ 1

\text не будет работать, потому что для него требуется пакет amsmath (не включен в mathtext - механизм математического рендеринга matplotlib). Таким образом, у вас в основном есть два варианта:

  • использовать рендеринг шрифтов на основе латекса
from matplotlib import pyplot as plt
import matplotlib as mpl
mpl.rcParams['text.usetex'] = True
mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}'] #for \text command
plt.plot([1,2,3])
plt.title(r"$f_{\text{cor, r}}$")
plt.show()
  1. используйте mathtext, но используйте \mathrm вместо \text
from matplotlib import pyplot as plt
import matplotlib as mpl
mpl.rcParams['text.usetex'] = False  # not really needed
plt.plot([1,2,3])
plt.title(r"$f_{\mathrm{cor, r}}$")
plt.show()

Последний подход создает цифру, подобную enter image description here
Имейте в виду, что в отличие от команды \text пробелы внутри среды \mathrm не соблюдаются. Если вам нужно больше пространства между переменными, вы должны использовать команды латексного стиля (\<space>, \;,...).

Ответ 2

Один из вариантов заключается в том, чтобы позволить matplot lib использовать LaTeX напрямую для вашего текстового рендеринга (а не mathtext, которую предоставляет matplotlib).

import matplotlib as mpl
mpl.rcParams['text.usetex'] = True
# (create your plot as before)
plt.title(r"$f_{\mathrm{cor, r}}$")

Для этого требуется полностью работающая установка LaTeX. Кажется, я не могу распознать \text, но \mathrm работает (для шрифта "roman family" ) просто отлично.