wake-up-neo.com

Matplotlib kann keine grundlegenden Schriftarten finden

Ich verwende matplotlib Version 2.0.0 für Python 3 in einer virtuellen Miniconda-Umgebung. Ich arbeite an einem Unix-Cluster für wissenschaftliche Datenverarbeitung, für den ich keine Root-Berechtigungen habe. Im Allgemeinen führe ich Python-Code über ein ipython-Notebook aus. Wenn ich einen grundlegenden Befehl mache, wie:

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

Ich bekomme eine Fehlermeldung:

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

Ich möchte eine Times New Roman-Schriftart verwenden können, aber auch nach dem Löschen der Font-Cache-Datei (fontList.py3k.cache), die ich hier finde:

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

Die Befehle:

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

habe keine Wirkung, ich bekomme den gleichen Fehler wie oben. Das True Type Fonts-Verzeichnis:

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

es enthält nur 40 Schriftarten des Typs: DejaVuSerif, DejaVuSans, STIX, cmb, cmt, cmy

Irgendeine Idee, was los sein könnte und wie ich zusätzliche Schriftarten hinzufügen kann? Vielen Dank!

35
dylkot

Diese Arbeit für mich ::

$ Sudo apt-get install msttcorefonts -qq
16
user3313834

Ich hatte genau das gleiche Problem auf einem Vagrant VM mit Ubuntu Xenial 64-Bit. Egal wie viele Schriften ich bereits installiert hatte, Matplotlib hatte ein Problem mit dem Systemnamen "Sans-Serif". Ich habe es behoben durch:

  • Jupyter stoppen
  • Font-manager installieren: Sudo apt install font-manager
  • Bereinigen des Matplotlib-Cache-Verzeichnisses: rm ~/.cache/matplotlib -fr
  • Jupyter neu starten. 

Keine Fehlermeldungen mehr über Sans-Serif.

15
Craig Kelly

Damit es funktioniert, musste ich die beiden aktuellen Top-Antworten kombinieren. Folgendes hat für mich funktioniert:

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

Eine Lösung für Windows-Benutzer, wenn Sie mit der Warnung konfrontiert werden:

UserWarning: findfont: Font family ['serif'] not found. Falling back to DejaVu Sans
(prop.get_family(), self.defaultFamily[fontext]))
  1. Löschen Sie die im matplotlib-Cache befindlichen Schriftarten.
    Cache-Speicherort: import matplotlib as mpl; print(mpl.font_manager.get_cachedir())

  2. Matplotlibs Schriftverzeichnis finden. Der Pfad könnte ähnlich sein
    C:\Miniconda3\pkgs\matplotlib-2.2.2-py36_1\Lib\site-packages\matplotlib\mpl-data\fonts\ttf

  3. Kopieren Sie erforderliche Schriftarten wie Computer Modern in dieses Verzeichnis.

Die Warnung bleibt möglicherweise bestehen, aber die Schriftart Ihrer Plots sollte sich entsprechend ändern.

4
mab

Ich hatte ein ähnliches Problem in einem Cloud-Datalab-Docker-Image, das auf einer gcloud-VM ausgeführt wird. Das folgende Problem wurde für mich behoben:

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

Hier finden Sie Anweisungen, wie Sie zu dem Docker-Image gelangen, das auf der gcloud VM ausgeführt wird, die die Datalab-Instanz enthält, nur für den Fall.

0

probieren Sie alle oben genannten Methoden aus und arbeiten Sie nicht für mich.

mein Weg, dies zu lösen, ist ein kleines Problem, weil ich Conda auf Ubuntu Server verwende, der Jupyter ausführt

locate -b '\mpl-data'

einen Ordner finden 

/usr/share/matplotlib/mpl-data

dann füge ich die simhei-fonts in den font-ordner in mpl-data . ein und entferne dann den matplotlib-font-cache

rm -rf ~/.cache/matplotlib

jupyter Notebook neu starten, und es funktioniert.

0
tyan

Ich habe es durch Setzen des Pyplot-Parameters behoben:

import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'serif'

so können Sie Schriftarten (Helvetica, Times New Roman) wie die folgenden verwenden:

ax.set_title('your_title_text',fontname="Times New Roman", fontsize=20)
0
tngotran