web-dev-qa-db-fra.com

changer la police par défaut de matplotlib

J'essaie de changer la police par défaut de matplotlib en Helvetica Neue. Sur mon Mac avec EPD/Canopy, tout fonctionnait bien il y a quelque temps.

Essayer de faire la même chose sur Ubuntu maintenant et ça ne marche pas.

C'est ce que j'ai fait:

  1. Helvetica Neue installé

    $ fc-match 'Helvetica Neue':Light
    HelveticaNeue-Light.otf: "Helvetica Neue" "細體"
    
  2. Converti l'odt/dfont en ttf:

    fondu -show HelveticaNeue.dfont
    
  3. changé matplotlibrc en

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

    J'ai aussi essayé avec:

    font.family: sans-serif
    font.sans-serif: Helvetica Neue
    
  4. J'ai supprimé le cache des polices

    rm ~/.config/matplotlib/fontList.cache
    

Mais aucune de ces étapes ne fonctionne pour moi.

    $ 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]))

La version est 1.3.0

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

J'ai également essayé de déplacer les polices vers ~/.config/matplotlib/fonts/ttf mais ça n'a pas marché.


EDIT: Comme suggéré, j'ai essayé de sélectionner une police spécifique pour un texte spécifique.

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')

Mais cela ne fait aucune différence.

/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

Cependant, je semble rencontrer ce problème uniquement avec cette police Helvetica/Helvetica Neue. (prop.get_family (), self.defaultFamily [fontext]))

26
gozzilli

Cela ne changera pas votre police de façon permanente, mais cela vaut la peine d'essayer

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

Ubuntu 14.04 LTS

Téléchargez les polices

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

Mettre à jour le cache de police

Sudo fc-cache -fv

Vous pouvez vérifier la liste des polices

fc-list

Redémarrez ipython, etc. Vérifiez la liste des polices

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

Prenez votre nom de police

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

Dessiner

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

Kim a déjà introduit une solution dynamique qui fonctionne parfaitement, et voici deux autres façons de faire la même chose en statique.

Tout d'abord, vous pouvez mettre une ligne dans le fichier rc pour matplotlib. Reportez-vous à cette page pour plus d'informations sur la localisation du fichier et les paramètres détaillés.

font.family : NanumGothic

Deuxièmement, si vous travaillez avec ipython, vous pouvez placer des commandes de définition de police dans un fichier de configuration du shell interactif. Recherchez le fichier nommé ipython_config.py qui se trouve généralement sous ~/.ipython/quelque part. Ajoutez ensuite deux autres lignes à la liste, c.InteractiveShellApp.exec_lines.

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

Former fonctionne toujours quel que soit l'environnement sur lequel vous exécutez votre script Shell car il charge la police lorsque votre script importe matplotlib.

1
Lyle

Le cache des polices apparaît à un endroit différent pour moi (.cache/matplotlib/fontList.cache). Et avant, j'en avais en fait trois à différents endroits: /

essayez peut-être de le rechercher dans votre répertoire personnel:

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