У меня проблема с Python (WinPython-64bit-3.6.5.0Qt5)/MATPLOTLIB (версия 2.2.2) при рендеринге текста с помощью TeX (MikTeX 2.9) и применении шрифта Times, который есть в списке стандартных шрифтов (см. Настройка библиотеки matplotlib)
В минимальном примере ниже я получаю следующее сообщение об ошибке:
File "C:\WinPython-64bit-3.6.5.0Qt5\python-3.6.5.amd64\lib\site-packages\matplotlib\dviread.py", line 471, in _fnt_def_real
raise error_class("missing font metrics file: %s" % fontname)
FileNotFoundError: missing font metrics file: rsfs10
Вот пример воспроизведения проблемы:
import numpy as np
import matplotlib.pyplot as plt
# Example data
t = np.arange(0.0, 1.0 + 0.01, 0.01)
s = np.cos(4 * np.pi * t) + 2
from matplotlib import rc
rc('font',**{'family':'serif','serif':['Times']})
rc('text', usetex=True)
plt.plot(t, s)
plt.xlabel(r'\textbf{time} (s)')
plt.ylabel(r'\textit{voltage} (mV)',fontsize=16)
plt.title(r"\TeX\ is Number "
r"$\displaystyle\sum_{n=1}^\infty\frac{-e^{i\pi}}{2^n}$!",
fontsize=16, color='gray')
# Make room for the ridiculously large title.
plt.subplots_adjust(top=0.8)
plt.savefig('tex_demo')
plt.show()
Похоже, что у python нет доступа к шрифтам TeX, например. rsfs10, который находится в моей папке установки MikTeX C:\Program Files\MiKTeX 2.9\fonts\source\public\rsfs
Если я не указываю имя шрифта, он работает со стандартным шрифтом с засечками (он выглядит как компьютерный современный шрифт с засечками).
from matplotlib import rc
rc("pdf", fonttype=3)
rc('font',**{'family':'serif'})
rc('text', usetex=True)
Я должен добавить следующее: В приведенном ниже минимальном примере я сначала получаю предупреждающее сообщение (которого я не получаю в своем полном исходном коде и, вероятно, оно не связано с основной проблемой):
C:\WinPython-64bit-3.6.5.0Qt5\python-3.6.5.amd64\lib\site-packages\matplotlib\font_manager.py:1328: UserWarning: findfont: Font family ['serif'] not found. Falling back to DejaVu Sans (prop.get_family(), self.defaultFamily[fontext]))
Я уже пробовал решение для Windows, описанное здесь: Matplotlib не может найти базовые шрифты, но это не помогло не помогает убрать предупреждение. Если я не укажу Times в качестве шрифта, предупреждение также не выдается.