I am using matplotlib version 2.0.0 on Python 3 in a miniconda virtual environment. I am working on a unix scientific computing cluster where I don't have root privileges. I am generally executing python code through an ipython notebook. If I do a basic command such as:
import matplotlib.pyplot as plt
plt.scatter([1,5], [1,5])
I get an error message:
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]))
I would like to be able to use a Times New Roman font but even after deleting the Font cache file (fontList.py3k.cache) which I find from here:
import matplotlib as mpl
fm = mpl.font_manager
fm.get_cachedir()
The commands:
mpl.rcParams['font.family'] = ['serif']
mpl.rcParams['font.serif'] = ['Times New Roman']
have no effect, I get the same error as above. The true type fonts directory:
path_to_miniconda/miniconda3/envs/conda34/lib/python3.4/site-packages/matplotlib/mpl-data/fonts/ttf/
only has 40 fonts in it of the type: DejaVuSerif,DejaVuSans,STIX,cmb, cmt, cmy
Any idea what could be going on and how I can add additional fonts? Thanks!
This work for me::
$ sudo apt-get install msttcorefonts -qq
I had this exact same problem on a Vagrant VM running Ubuntu Xenial 64-bit. No matter how many fonts I had already installed, matplotlib was having a problem with the "system" font name "sans-serif". I fixed it by:
- Stopping Jupyter
- Installing font-manager:
sudo apt install font-manager
- Cleaning the matplotlib cache directory:
rm ~/.cache/matplotlib -fr
- Restarting Jupyter.
No more error messages about sans-serif.
To get it to work, I had to combine the two current top answers. Here's what worked for me:
$ sudo apt install msttcorefonts -qq
$ rm ~/.cache/matplotlib -rf
A solution for Windows users, when confronted with the warning:
UserWarning: findfont: Font family ['serif'] not found. Falling back to DejaVu Sans
(prop.get_family(), self.defaultFamily[fontext]))
Delete the fonts located in matplotlib's cache.
Cache's location: import matplotlib as mpl; print(mpl.font_manager.get_cachedir())
Find matplotlib's font directory. The path might be similar to
C:\Miniconda3\pkgs\matplotlib-2.2.2-py36_1\Lib\site-packages\matplotlib\mpl-data\fonts\ttf
Copy necessary fonts like Computer Modern to this directory.
The warning may persist, but your plots' font should change appropriately.
I was facing a similar issue in a Cloud Datalab docker image running on a gcloud VM. Executing the following fixed the issue for me:
$ sudo apt install msttcorefonts -qq
$ rm ~/.cache/matplotlib -rf
Here is instructions on how to get to the docker image running on the gcloud VM containing the Datalab instance just in case.
try all the methods above, not work for me.
my way to solve this is a little dirrent cause I'm using conda on ubuntu server running jupyter
locate -b '\mpl-data'
find a folder
/usr/share/matplotlib/mpl-data
then I add the simhei fonts into the font folder in mpl-data .
then remove matplotlib fonts cache
rm -rf ~/.cache/matplotlib
restart jupyter notebook, and it works.