#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. Спасибо!