Как избежать вызова latex в matplotlib (вывод в pgf)

1

Я использую matplotlib с его pgf-бэкендом для генерации графиков, которые я включаю в свой проект LaTeX beamer. Я сталкиваюсь с проблемами, когда использую латексные команды, которые не определены. Но для моего приложения мне не нужен matplotlib для генерации меток или аннотаций с использованием латекса, мне нужен только правильный вывод pgf, и я буду вызывать LaTeX в своем документе beamer. Если бы я запустил этот код в записной книжке, я бы ожидал, что в xlabel будет график с буквенным символом "\ si {\ процент}".

В приведенном ниже MWE, когда я запускаю его с закомментированной строкой (используя \si{\percent}), происходит сбой matplotlib с ошибкой латекса ("неизвестная команда si"). Я не хочу создавать преамбулу с помощью matplotlib, я просто хочу вывод pgf, содержащий команду \si {\ процент}...

Если я использую двойную обратную косую черту, код проходит, но двойная обратная косая черта появляется также в выводе pfg, и, следовательно, latex не распознает команду (я думаю, что она видит новую строку).

Я не понимаю "значение" plt.rc('text', usetex = False). Я думал, что это отключит вызов LaTeX вообще...

import numpy as np
import matplotlib as mpl
mpl.use('pgf')
from matplotlib import pyplot as plt
from matplotlib import rc
plt.style.use('bmh')
plt.rc('pgf',rcfonts=False)
plt.rc('text', usetex=False)
x = np.linspace(0,100,101)
y = np.cos(x/100)*np.exp(-x/100)
plt.plot(x,y)
#plt.xlabel(r'value (\si{\percent})')
plt.xlabel(r'value (%)')
plt.savefig('test.pgf')
Теги:
matplotlib
latex
pgf

1 ответ

0

Есть ли причина, по которой вы не решаетесь включить преамбулу? Это облегчает решение. Следующие работы для меня:

import numpy as np
import matplotlib as mpl

mpl.use('pgf')

from matplotlib import pyplot as plt

pgf_with_latex = {
        'text.usetex': False,
        'pgf.rcfonts': False,
        "pgf.preamble": [
                r"\usepackage{siunitx}"
                ]
}

mpl.rcParams.update(pgf_with_latex)

plt.style.use('bmh')

x = np.linspace(0,100,101)
y = np.cos(x/100)*np.exp(-x/100)
plt.plot(x,y)

plt.xlabel(r'value (\si{\percent})')
plt.savefig('test.pgf')
  • 0
    Спасибо за ответ. Мне не нравится опция включения преамбулы, потому что мне придется делать это для всех пакетов, которые я хочу использовать. Также неудобно «поддерживать» один и тот же список в нескольких местах (у меня есть 40+ графиков, которые я создаю и использую в своей презентации на проекторе).
  • 0
    К сожалению, да, вам придется включить все пакеты, необходимые для набора вашего сюжета. Однако вам не придется поддерживать эту преамбулу в нескольких местах. Вы можете либо изменить файл matplotlibrc по умолчанию, либо создать свой собственный, и вызвать его в начале своей процедуры построения; например, plt.style.use('mybeamer')
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню