web-dev-qa-db-fra.com

Matplotlib ne trouve pas les polices de base

J'utilise la version 2.0.0 de matplotlib sur Python 3 dans un environnement virtuel miniconda. Je travaille sur un cluster de calcul scientifique unix où je n'ai pas les privilèges root. J'exécute généralement du code python via un cahier ipython. Si je fais une commande de base telle que:

import matplotlib.pyplot as plt
plt.scatter([1,5], [1,5])

Je reçois un message d'erreur:

path_to_miniconda/miniconda3/envs/conda34/lib/python3.4/site-
packages/matplotlib/font_manager.py:1297: UserWarning: findfont: Font family
['sans-serif'] not found. Falling back to DejaVu Sans
(prop.get_family(), self.defaultFamily[fontext]))

J'aimerais pouvoir utiliser une police Times New Roman, mais même après avoir supprimé le fichier de cache de polices (fontList.py3k.cache) que je trouve à partir d'ici:

import matplotlib as mpl
fm = mpl.font_manager
fm.get_cachedir()

Les commandes:

mpl.rcParams['font.family'] = ['serif']
mpl.rcParams['font.serif'] = ['Times New Roman']

n’ai aucun effet, j’obtiens la même erreur que ci-dessus. Le répertoire des polices de type vrai:

path_to_miniconda/miniconda3/envs/conda34/lib/python3.4/site-packages/matplotlib/mpl-data/fonts/ttf /

ne contient que 40 polices du type: DejaVuSerif, DejaVuSans, STIX, cmb, cmt, cmy

Avez-vous une idée de ce qui pourrait se passer et comment ajouter des polices supplémentaires? Merci!

35
dylkot

Ce travail pour moi ::

$ Sudo apt-get install msttcorefonts -qq
16
user3313834

J'ai eu exactement le même problème sur un Vagrant VM exécutant Ubuntu Xenial 64 bits. Quel que soit le nombre de polices que j'avais déjà installées, matplotlib rencontrait un problème avec le nom de police "système" "sans-serif". Je l'ai corrigé par:

  • Arrêter Jupyter
  • Installation du gestionnaire de polices: Sudo apt install font-manager
  • Nettoyage du répertoire de cache de matplotlib: rm ~/.cache/matplotlib -fr
  • Redémarrage de Jupyter. 

Plus de message d'erreur sur le sans-serif.

15
Craig Kelly

Pour que cela fonctionne, je devais combiner les deux principales réponses actuelles. Voici ce qui a fonctionné pour moi:

$ Sudo apt install msttcorefonts -qq
$ rm ~/.cache/matplotlib -rf
5
Felix Leroux

Une solution pour les utilisateurs Windows confrontés à l'avertissement:

UserWarning: findfont: Font family ['serif'] not found. Falling back to DejaVu Sans
(prop.get_family(), self.defaultFamily[fontext]))
  1. Supprimez les polices situées dans le cache de matplotlib.
    Emplacement du cache: import matplotlib as mpl; print(mpl.font_manager.get_cachedir())

  2. Trouver le répertoire de polices de matplotlib. Le chemin peut être similaire à
    C:\Miniconda3\pkgs\matplotlib-2.2.2-py36_1\Lib\site-packages\matplotlib\mpl-data\fonts\ttf

  3. Copiez les polices nécessaires comme Computer Modern dans ce répertoire.

L'avertissement peut persister, mais la police de vos parcelles doit changer en conséquence.

4
mab

Je rencontrais un problème similaire dans une image de docker Cloud Datalab s'exécutant sur une machine virtuelle gcloud. L'exécution de ce qui suit a résolu le problème pour moi:

$ Sudo apt install msttcorefonts -qq
$ rm ~/.cache/matplotlib -rf

Here contient des instructions sur la manière d'obtenir l'image du menu fixe s'exécutant sur le gcloud VM contenant l'instance de Datalab au cas où.

0
Soroush Sotoudeh

essayez toutes les méthodes ci-dessus, ne fonctionne pas pour moi.

ma façon de résoudre ceci est un peu parce que j'utilise conda sur le serveur Ubuntu en cours d'exécution jupyter

locate -b '\mpl-data'

trouver un dossier 

/usr/share/matplotlib/mpl-data

puis j'ajoute les polices simhei dans le dossier des polices dans mpl-data . puis supprime le cache des polices matplotlib

rm -rf ~/.cache/matplotlib

redémarrez jupyter notebook, et cela fonctionne.

0
tyan