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!
Diese Arbeit für mich ::
$ Sudo apt-get install msttcorefonts -qq
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:
Sudo apt install font-manager
rm ~/.cache/matplotlib -fr
Keine Fehlermeldungen mehr über Sans-Serif.
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
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]))
Löschen Sie die im matplotlib-Cache befindlichen Schriftarten.
Cache-Speicherort: import matplotlib as mpl; print(mpl.font_manager.get_cachedir())
Matplotlibs Schriftverzeichnis finden. Der Pfad könnte ähnlich seinC:\Miniconda3\pkgs\matplotlib-2.2.2-py36_1\Lib\site-packages\matplotlib\mpl-data\fonts\ttf
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.
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.
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.
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)