LaTeX в matplotlib: переменные индексы, определенные с помощью .format()

#python #matplotlib #latex

#python #matplotlib #Латекс

Вопрос:

Я создаю массив подзаголовков, где каждый элемент определяется в цикле for. Для каждого подзаголовка ylabel записывается в LaTeX как имя переменной (скажем theta ) с подиндексом, определяемым счетчиком в цикле. Команда, .format() написанная внутри plt.ylabel(r'$theta_{:2d}$'.format(i)) , позволяет указать индекс.

Однако, когда счетчик имеет более 1 цифры, индекс переменной в ylabel применяется только к первой цифре, а остальные записываются в строку. Есть ли что-то, что я ошибаюсь в использовании .format() ? Или есть другой способ исправить это?

Пример:

 import numpy as np

import matplotlib
import matplotlib.pyplot as plt
matplotlib.rcParams.update({'font.size': 22})
matplotlib.rc('font', **{'family': 'serif', 'serif': ['Computer Modern']})
matplotlib.rcParams['text.usetex'] = True

N     = 500
theta = np.random.randn(90,N)
idx   = np.array([4,24,64,89])
nplot = len(idx) 

fig, axes = plt.subplots(nplot, 1, sharex='col', figsize=(10, 5))
axes      = axes.flatten()
for i in range(nplot):
    ax = axes[i]
    ax.plot(theta[idx[i],:], '-', color='navy')
    ax.set_ylabel(r'$theta_{:2d}$'.format(idx[i] 1))
    ax.set_xlim([0,N])
plt.show()
  

Результирующий рисунок, показывающий проблему, выглядит следующим образом:

введите описание изображения здесь

Ответ №1:

Вам нужно изменить форматирование на это:

 ax.set_ylabel(r'$theta_{{{:2d}}}$'.format(idx[i] 1))
  

LaTeX ожидает, что форматирование будет theta_{somenumber} , в противном случае он будет указывать только первую цифру. Для достижения этого вам понадобятся 3 скобки в Python.

Комментарии:

1. Я пробовал с 2 скобками, и это не сработало, никогда не думал, что требуется python 3. Спасибо!