Ошибка поиска шрифта 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
Некоторые вещи, которые не решают проблему для меня:
- Удалить файлы в
~/.matplotlib/
(т.е.matplotlibrc
,fontList.cache
,tex.cache/
) - Изменить
font.family
недвижимость в~/.matplotlib/matplotlibrc
- Переустановите 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/
Скачайте и установите Фондю для конвертации Mac-Helvetica в ttf-Helvetica. С помощью homebrew это можно сделать с помощью:
brew install fondu
,Найдите Helvetica в своей системе. Для меня это было
/System/Library/Fonts/Helvetica.dfont
Найдите, где matplotlib хранит свои данные. использование
python import matplotlib; matplotlib.matplotlib_fname()
распечатать каталог.Поместите.ttf в:
your_matplotlib_dir/matplotlib/mpl-data/fonts/ttf
затемsudo fondu -show /System/Library/Fonts/Helvetica.dfont
Отредактируйте ваш файл.matplotlibrc. Скопируйте оригинальный файл.matplotlibrc в личный каталог, чтобы он не перезаписывался при обновлении matplotlib.
$ cp your_matplotlib_dir/matplotlib/mpl-data/matplotlibrc ~/.matplotlib/matplotlibrc
Найдите строку:
#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
,