67 votes

Matplotlib ne trouve pas les polices de base

Je suis à l'aide de matplotlib version 2.0.0 sur Python 3 dans un miniconda environnement virtuel. Je suis en train de travailler sur un unix scientifique cluster de calcul où je n'ai pas les privilèges root. Je suis généralement d'exécuter du code python à travers un ipython notebook. Si je fais une commande de base tels 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]))

Je voudrais être en mesure d'utiliser la police Times New Roman, mais même après la suppression du fichier de cache de Police (fontList.py3k.cache) que j'ai trouver 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'ont aucun effet, j'obtiens la même erreur que ci-dessus. Les polices true type d'annuaire:

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

a seulement 40 polices de type: DejaVuSerif,DejaVuSans,STIX,cmb, cmt, cmj

Toute idée de ce qui pourrait se passer et comment je peux ajouter des polices supplémentaires? Merci!

46voto

felleg Points 96

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
 

31voto

Craig Kelly Points 611

J'ai eu exactement le même problème sur une machine virtuelle vagabonde 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 de font-manager: sudo apt install font-manager
  • Nettoyage du répertoire de cache matplotlib: rm ~/.cache/matplotlib -fr
  • Redémarrage de Jupyter.

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

25voto

user3313834 Points 558

Ce travail pour moi ::

 $ sudo apt-get install msttcorefonts -qq
 

15voto

mab Points 1191

Une solution pour les utilisateurs de Windows, lorsque l'on est confronté avec l'avertissement:

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

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

  3. Copie des polices nécessaires comme Ordinateur Moderne à ce répertoire.

L'avertissement peut persister, mais votre parcelles de " police devrait changer de façon appropriée.

1voto

Je rencontrais un problème similaire dans une image de dockeur 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
 

Voici les instructions pour accéder à l'image du menu fixe s'exécutant sur la machine virtuelle gcloud contenant l'instance Datalab, au cas où.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X