Ошибка поиска шрифта Matplotlib font_manager.py

На компьютере с Ubuntu 12.04, когда я что-то строю, я получаю сообщение об ошибке вроде:

/usr/lib/pymodules/python2.7/matplotlib/font_manager.py:1228: UserWarning: findfont: не может соответствовать:family=Bitstream Vera Sans: стиль = нормальный: вариант = нормальный: вес = средний: растянуть = нормальный: размер = X-Large. Возвращение /usr/share/matplotlib/mpl-data/fonts/ttf/cmb10.ttf

который я не могу найти решение онлайн. Следующий код воспроизводит ошибку

import pylab as plt
plt.plot(np.random.random((128)))
plt.title("This should be monospaced")
plt.savefig("/tmp/testfig.pdf")

а также самопроверка matplotlib выдает эту ошибку:

python -c "import matplotlib as m ; m.test(verbosity=1)"

В ~/.matplotlib/matplotlibrc Я имею:

font.family         : monospace
font.style          : normal
font.variant        : normal
font.weight         : medium
font.stretch        : normal
font.size           : 10.0
font.serif          : Palatino, Bitstream Vera Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Charter, serif
font.sans-serif     : Helvetica, Bitstream Vera Sans, sans-serif
font.monospace      : Monaco, Ubuntu Mono Regular, Bitstream Vera Sans Mono, Andale Mono, Nimbus Mono L, Fixed, Terminal, monospace

Некоторые вещи, которые не решают проблему для меня:

  1. Удалить файлы в ~/.matplotlib/ (т.е. matplotlibrc, fontList.cache, tex.cache/)
  2. Изменить font.family недвижимость в ~/.matplotlib/matplotlibrc
  3. Переустановите matplotlib после apt-get purge

Версии, которые я использую:

  • matplotlib 1.1.1 ~ rc1 + git20120423-0ubuntu1
  • Python 2.7.3
  • IPython 0.12.1
  • Ubuntu 12.04

4 ответа

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

libsys-cpu-perl pcf2bdf tex-gyre ttf-bitstream-vera tv-fonts xfonts-traditional

Я не уверен, почему это помогает, так что, возможно, кто-то может добавить некоторые сведения о том, почему это помогает. Надеюсь, это поможет кому-то еще.

matplotlib всегда использует свой собственный набор шрифтов, независимо от других шрифтов, установленных в системе. На Ubuntu 12.04 LTS эти шрифты расположены в /usr/share/matplotlib/mpl-data/fonts/,

При вызове шрифта в вашем коде, который недоступен в этом каталоге, matplotlib сначала попытаюсь вернуться к Bitstream Vera Sans. Однако ни один из этих шрифтов не доступен в .../mpl-data/fonts/ на установках Ubuntu 12.04 LTS. В заключение, matplotlib возвращается к cmb10.ttf шрифт, который доступен.

Установка пакетов системных шрифтов, как предложено выше, не устранит это предупреждение.

Можно, однако, добавить rcParams['mathtext.fontset'] = 'cm' к коду, чтобы избежать множественных откатов и предупреждений.

В качестве альтернативы, укажите шрифт, который присутствует в /usr/share/matplotlib/mpl-data/fonts/,

Для меня на OSX моя установка Python была в моем домашнем каталоге из-за ограничений администратора, которые вызвали путаницу с расположением шрифтов. Я смог заставить Helvetica работать, выполнив следующие действия: http://blog.olgabotvinnik.com/blog/2012/11/15/2012-11-15-how-to-set-helvetica-as-the-default-sans-serif-font-in/

  1. Скачайте и установите Фондю для конвертации Mac-Helvetica в ttf-Helvetica. С помощью homebrew это можно сделать с помощью: brew install fondu,

  2. Найдите Helvetica в своей системе. Для меня это было /System/Library/Fonts/Helvetica.dfont

  3. Найдите, где matplotlib хранит свои данные. использование python import matplotlib; matplotlib.matplotlib_fname() распечатать каталог.

  4. Поместите.ttf в: your_matplotlib_dir/matplotlib/mpl-data/fonts/ttf затем sudo fondu -show /System/Library/Fonts/Helvetica.dfont

  5. Отредактируйте ваш файл.matplotlibrc. Скопируйте оригинальный файл.matplotlibrc в личный каталог, чтобы он не перезаписывался при обновлении matplotlib. $ cp your_matplotlib_dir/matplotlib/mpl-data/matplotlibrc ~/.matplotlib/matplotlibrc

  6. Найдите строку: #font.sans-serif : Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif затем раскомментируйте и переместите Helvetica вперед. font.sans-serif : Helvetica, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

Вероятно, это не загружает ваш matplotlibrc Конфигурационный файл Убедитесь, что это в нужном месте. В документации перечислены несколько мест, в которых производится поиск. Попробуйте поместить его в одно из описанных мест:

  • текущий рабочий каталог процесса python
  • в ~/.config/matplotlib/matplotlibrc

Последний фактически не работал для меня с Debian 7, но и не работает ~/.matplotlib/matplotlibrc,

Другие вопросы по тегам