LaTeX не обрабатывает весь текст на графике matplotlib.pyplot

Для оформления графика использую следующий код:

import matplotlib.pyplot as plt
...
fig = plt.figure(figsize=(8, 8))
ax1 = fig.add_subplot(111)

plt.rcParams.update({
    "text.usetex": True,
    "font.family": "serif",
    "font.serif": ["Times New Roman"],
})

plt.loglog(x_arr, r_s_arr, color='black', linestyle='dashed')

plt.loglog(x_arr, r_true_m_arr_10, color='black')
plt.loglog(x_arr, r_true_m_arr_1, color='black')
plt.loglog(x_arr, r_true_m_arr_01, color='black')

plt.loglog(x_arr, r_m_arr_10, color='black', linestyle='dotted')
plt.loglog(x_arr, r_m_arr_1, color='black', linestyle='dotted')
plt.loglog(x_arr, r_m_arr_01, color='black', linestyle='dotted')

font = {'fontname': 'Times New Roman'}

plt.yticks(size=16, **font)
plt.figtext(0.2, 0.76, '$R_m(\mu_{30})$', fontsize=16)
plt.figtext(0.8, 0.7, '$R_s$', fontsize=16)
plt.xlabel('$\dot{m}_0, g\, s^{-1}$', fontsize=16)
plt.ylabel('$R, cm$', fontsize=16)

ax1.tick_params(direction='in', axis='both', which='both')
ax1 = plt.gca()
ax1.spines['top'].set_visible(True)
ax1.spines['right'].set_visible(True)

ax2 = ax1.twinx()
ax2.tick_params(direction='in', axis='both', which='both')

left = 0.00189547850
right = 4.970563331
bottom = 2378524.9383836435
top = 2521556271.882251

ax1.set(xlim=(left, right), ylim=(bottom, top))

plt.show()

В результате на выходе получаю: введите сюда описание изображения

Проблема в том, что, несмотря на этот кусочек:

plt.rcParams.update({
"text.usetex": True,
"font.family": "serif",
"font.serif": ["Times New Roman"],
})

LaTeX-ом обрабатываются только записи внутри plt.figtext, а не, например, записи внутри plt.xlabel или метки по оси Ох (хотя и там, и там я использую матмоду $...$). Что стоит сделать, если латеховское оформление нужно везде?


Ответы (1 шт):

Автор решения: Александр

Проблема решается так: нужно обновлять rcParams до объявления переменной, содержащей фигуру, а именно

plt.rcParams.update({
"text.usetex": True,
"font.serif": ["Computer Modern Roman"],
})

fig = plt.figure(figsize=(...))
ax = fig.add_subplot(111)

Шрифт Computer Modern Roman выбран из-за того, что именно им верстает LaTeX. После всего этого отпадает необходимость дополнительно изменять шрифт у x- и y-меток. К сожалению, именно такой код не обрабатывает должным образом название графика.

→ Ссылка