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

10664
Tim

На компьютере с 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
В Ubuntu 16.04 с matplotlib 2.2.3 нет такой папки, как `~ / .matplotlib /`. Где файлы кэша, которые я должен удалить? MERose 5 лет назад 0

4 ответа на вопрос

4
Tim

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

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

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

+1, та же проблема на Ubuntu 12.10 (с mpl в virtualenv). решено с вашим ответом. Благодарю. bmu 11 лет назад 0
Не удалось найти шрифт. Когда вы установили ttf-bitstream-vera, вы установили шрифт, который он не нашел. Timtro 10 лет назад 1
@Timtro, но почему же не работает изменение `font.family`? Или он всегда пытается разрешить все семейства шрифтов при запуске? Tim 10 лет назад 0
@ Тим - Хороший вопрос. Ответ был совершенно ясен для меня шесть недель назад, когда я ответил, но сейчас я не понимаю, почему. Timtro 10 лет назад 0
2
Serge Stroobandt

matplotlib always uses its own set of fonts, independently of other fonts installed on the system. On Ubuntu 12.04 LTS, these fonts are located in /usr/share/matplotlib/mpl-data/fonts/.

When calling a font in your code which is not available in this directory, matplotlib will first try to fall back to Bitstream Vera Sans. However, neither that font is available in .../mpl-data/fonts/ on Ubuntu 12.04 LTS installations. Finally, matplotlib falls back to the cmb10.ttf font, which is available.

Installing system font packages as suggested above will not remedy this warning.

One can, however, add rcParams['mathtext.fontset'] = 'cm' to the code to avoid the multiple fallbacks and warnings.

Alternatively, specify a font which is present in /usr/share/matplotlib/mpl-data/fonts/.

Есть ли способ добавить шрифты в matplotlib? Я попытался мягко связать мои шрифты ttf с `/ usr / share / matplotlib / mpl-data / fonts / ttf /`, но безуспешно. PhilMacKay 9 лет назад 2
2
Sealander

For me on OSX, my Python installation was in my home directory due to admin restrictions which caused font location confusion. I was able to get Helvetica working following these steps: http://blog.olgabotvinnik.com/blog/2012/11/15/2012-11-15-how-to-set-helvetica-as-the-default-sans-serif-font-in/

  1. Download and install Fondu to convert Mac-Helvetica to ttf-Helvetica. With homebrew, this can be done with: brew install fondu.

  2. Find Helvetica on your system. For me, it was /System/Library/Fonts/Helvetica.dfont

  3. Find where matplotlib stores its data. Use python import matplotlib; matplotlib.matplotlib_fname() to print the directory.

  4. Put the .ttf in: your_matplotlib_dir/matplotlib/mpl-data/fonts/ttf then sudo fondu -show /System/Library/Fonts/Helvetica.dfont

  5. Edit your .matplotlibrc file. Copy the original .matplotlibrc file into a personal directory so it doesn’t get over written when updating matplotlib. $ cp your_matplotlib_dir/matplotlib/mpl-data/matplotlibrc ~/.matplotlib/matplotlibrc

  6. Find the line: #font.sans-serif : Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif then uncomment and move Helvetica to the front. font.sans-serif : Helvetica, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

Пожалуйста, процитируйте основные части ответа по ссылочной ссылке (ссылкам), так как ответ может стать недействительным, если связанные страницы изменятся. DavidPostill 8 лет назад 0
0
Aryeh Leib Taurog

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

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

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