Подтвердить что ты не робот

Изменить шрифт по умолчанию matplotlib

Я пытаюсь изменить шрифт по умолчанию matplotlib на Helvetica Neue. На моем Mac с EPD/Canopy все работало хорошо некоторое время назад.

Попытка сделать то же самое на ubuntu сейчас и не работает.

Это то, что я сделал:

  • Установленный Helvetica Neue

    $ fc-match 'Helvetica Neue':Light
    HelveticaNeue-Light.otf: "Helvetica Neue" "細體"
    
  • Преобразовал odt/dfont в ttf:

    fondu -show HelveticaNeue.dfont
    
  • изменил matplotlibrc на

    $ cat ~/.config/matplotlib/matplotlibrc
    ...
    font.family: Helvetica Neue
    

    Я также пробовал:

    font.family: sans-serif
    font.sans-serif: Helvetica Neue
    
  • Я удалил кеш шрифта

    rm ~/.config/matplotlib/fontList.cache
    

Но ни один из этих шагов не работает для меня.

    $ python -c 'from  matplotlib import pyplot as plt; plt.plot(1); plt.savefig("/tmp/test.png")'
    /usr/local/lib/python2.7/dist-packages/matplotlib-1.3.0-py2.7-linux-x86_64.egg/matplotlib/font_manager.py:1236: 
    UserWarning: findfont: Font family ['Helvetica Neue'] not found. Falling back to Bitstream Vera Sans

(prop.get_family(), self.defaultFamily [fontext]))

Версия 1.3.0

    $ python -c 'import matplotlib; print  matplotlib.__version__'
    1.3.0

Я также попытался переместить шрифты на ~/.config/matplotlib/fonts/ttf, но это не сработало.


EDIT: Как я предложил, я попытался выбрать конкретный шрифт для определенного текста.

import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager

path = '/home/<myusername>/.fonts/HelveticaNeue.ttf'

prop = font_manager.FontProperties(fname=path)
prop.set_weight = 'light'
mpl.rcParams['font.family'] = prop.get_name()
mpl.rcParams['font.weight'] = 'light'

fig, ax = plt.subplots()
ax.set_title('Text in a cool font', fontproperties=prop, size=40)
plt.savefig('/tmp/test2.png')

Но это не имеет значения.

/usr/local/lib/python2.7/dist-packages/matplotlib-1.3.0-py2.7-linux-x86_64.egg/matplotlib/font_manager.py:1236: 
UserWarning: findfont: Font family ['Helvetica Neue'] not found. Falling back to Bitstream Vera Sans

Однако я, похоже, испытываю эту проблему только с этим шрифтом Helvetica/Helvetica Neue.     (prop.get_family(), self.defaultFamily [fontext]))

4b9b3361

Ответ 1

Это не изменит шрифт навсегда, но стоит попробовать

matplotlib.rc('font', family='sans-serif') 
matplotlib.rc('font', serif='Helvetica Neue') 
matplotlib.rc('text', usetex='false') 
matplotlib.rcParams.update({'font.size': 22})

Ответ 2

Ubuntu 14.04 LTS

Загрузите шрифты

sudo cp NotoSansKR-Regular.otf /usr/share/fonts/

Обновить кеш шрифта

sudo fc-cache -fv

Вы можете проверить список шрифтов

fc-list

Перезагрузите ipython и т.д. Проверьте список шрифтов

[f.name for f in matplotlib.font_manager.fontManager.ttflist]

Возьмите имя своего шрифта

import matplotlib.pyplot as plt
from matplotlib import rcParams
rcParams['font.family'] = 'Noto Sans Korean'

Draw

plt.title(u'한글 제목')
plt.xlabel(u'한글 축 이름')
plt.plot(range(5))

Ответ 3

Кэш шрифтов отображается в другом месте для меня (.cache/matplotlib/fontList.cache). И до того, как я на самом деле имел три из них в разных местах:/

возможно, попробуйте найти его в своем домашнем каталоге:

find ~/ -name fontList.cache -exec rm {} \;

Ответ 4

Ким уже представил динамическое решение, отлично работает, и здесь два других способа делают то же самое в статике.

Сначала вы можете поместить строку в файл rc для matplotlib. Для получения дополнительной информации о поиске файла и подробных настройках обратитесь к этой странице.

font.family : NanumGothic

Во-вторых, если вы работаете с ipython, вы можете поместить некоторые команды для настройки шрифта в файл конфигурации для интерактивной оболочки. Найдите файл с именем ipython_config.py, который обычно находится в ~/.ipython/где-то. Затем добавьте еще две строки в список, c.InteractiveShellApp.exec_lines.

c.InteractiveShellApp.exec_lines = [
    "import matplotlib as mpl",
    "mpl.rcParams['font.family'] = 'NanumGothic'"
]

Бывший всегда работает в любой среде, в которой вы запускаете оболочку script, когда она загружает шрифт, когда ваш script импортирует matplotlib.