Как я могу использовать Humor Sans в matplotlib?

Я хочу создать график кривой ROC в стиле XKCD с помощью matploblib. В основном это работает нормально, но я не понимаю, почему в нем не используется юмор. Он определенно установлен в моей системе:

$ fc-list | grep -i humor
/home/user/.local/share/fonts/Humor-Sans.ttf: Humor Sans:style=Regular

Как заставить matplotlib использовать шрифт Humor-Sans?

Я уже пытался добавить fontname='Humor Sans':

/home/user/.local/lib/python3.6/site-packages/matplotlib/font_manager.py:1328:
UserWarning: findfont: Font family ['Humor Sans'] not found.
Falling back to DejaVu Sans

Мой код

import matplotlib.pyplot as plt
import numpy as np

with plt.xkcd():
    xs = np.linspace(0, 1, 50)
    plt.plot(xs, (1 / (-xs) + 50) / 50)
    plt.plot(xs, xs)
    plt.title('ROC Curve')
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.savefig('xkcd-roc-explanation.png')

Текущий результат

введите здесь описание изображения


person Martin Thoma    schedule 24.06.2018    source источник


Ответы (2)


Вы можете принудительно перестроить кеш шрифтов с помощью:

import matplotlib.font_manager
matplotlib.font_manager._rebuild()

затем проверьте наличие шрифта

matplotlib.font_manager.findfont('Humor Sans')
person Matt Hancock    schedule 27.09.2018

У Matplotlib, по-видимому, есть собственный файл кеша. В моей системе я мог бы решить эту проблему, выполнив

mv ~/.cache/matplotlib/fontList.json ~/.cache/matplotlib/fontList-backup.json
person Martin Thoma    schedule 24.06.2018
comment
Удаление кеша списка шрифтов по существу вызывает перестройку кеша шрифтов. Я не думаю, что ответ, который я опубликовал, более правильный, поскольку он использует частный метод _rebuild, но вот и все. - person Matt Hancock; 27.09.2018