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!
Ce travail pour moi ::
$ Sudo apt-get install msttcorefonts -qq
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:
Sudo apt install font-manager
rm ~/.cache/matplotlib -fr
Plus de message d'erreur sur le sans-serif.
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
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]))
Supprimez les polices situées dans le cache de matplotlib.
Emplacement du cache: import matplotlib as mpl; print(mpl.font_manager.get_cachedir())
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
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.
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ù.
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.