Matplotlib no puede encontrar fonts básicas

Estoy usando matplotlib versión 2.0.0 en Python 3 en un entorno virtual de miniconda. Estoy trabajando en un clúster de computación científica de Unix donde no tengo privilegios de raíz. Generalmente estoy ejecutando el código de Python a través de un cuaderno ipython. Si hago un comando básico como:

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

Recibo un mensaje de error:

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

Me gustaría poder usar una fuente Times New Roman, pero incluso después de eliminar el archivo de caché de fonts (fontList.py3k.cache) que encuentro aquí:

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

Los comandos:

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

No tengo efecto, me sale el mismo error que el anterior. El directorio de fonts de tipo verdadero:

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

solo tiene 40 fonts en el mismo tipo: DejaVuSerif, DejaVuSans, STIX, cmb, cmt, cmy

¿Alguna idea de lo que podría estar pasando y cómo puedo agregar fonts adicionales? ¡Gracias!

Este trabajo para mi ::

 $ sudo apt-get install msttcorefonts -qq 

Tuve el mismo problema en una máquina virtual Vagrant con Ubuntu Xenial de 64 bits. No importa cuántas fonts ya haya instalado, matplotlib tenía un problema con el nombre de fuente “sans-serif” del sistema. Lo arreglé por:

  • Deteniendo a Jupyter
  • Instalación de font-manager: sudo apt install font-manager
  • Limpiando el directorio del caché matplotlib: rm ~/.cache/matplotlib -fr
  • Reiniciando Jupyter.

No hay más mensajes de error sobre sans-serif.

Para que funcionara, tuve que combinar las dos mejores respuestas actuales. Esto es lo que funcionó para mí:

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

Una solución para usuarios de Windows, cuando se enfrentan con la advertencia:

 UserWarning: findfont: Font family ['serif'] not found. Falling back to DejaVu Sans (prop.get_family(), self.defaultFamily[fontext])) 
  1. Eliminar las fonts ubicadas en el caché de matplotlib.
    Ubicación del caché: import matplotlib as mpl; print(mpl.font_manager.get_cachedir()) import matplotlib as mpl; print(mpl.font_manager.get_cachedir())

  2. Encuentra el directorio de fonts de matplotlib. El camino podría ser similar a
    C:\Miniconda3\pkgs\matplotlib-2.2.2-py36_1\Lib\site-packages\matplotlib\mpl-data\fonts\ttf

  3. Copie las fonts necesarias como Computer Modern en este directorio.

La advertencia puede persistir, pero la fuente de sus gráficos debe cambiar adecuadamente.

Me enfrentaba a un problema similar en una imagen acoplable de Cloud Datalab que se ejecutaba en una máquina virtual de gcloud. Ejecutar lo siguiente solucionó el problema para mí:

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

Aquí hay instrucciones sobre cómo llegar a la imagen de la ventana acoplable que se ejecuta en la máquina virtual de gcloud que contiene la instancia de Datalab por si acaso.

Intenta todos los métodos anteriores, no funciona para mí.

Mi manera de resolver esto es una pequeña causa directa que estoy usando conda en el servidor de Ubuntu que ejecuta jupyter

 locate -b '\mpl-data' 

encontrar una carpeta

 /usr/share/matplotlib/mpl-data 

luego agrego las fonts simhei a la carpeta de fonts en mpl-data. a continuación, elimine la caché de fonts matplotlib

 rm -rf ~/.cache/matplotlib 

reinicie jupyter notebook, y funciona.