问题
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!
回答1:
This work for me::
$ sudo apt-get install msttcorefonts -qq
回答2:
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.
回答3:
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
回答4:
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.
回答5:
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.
回答6:
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.
回答7:
I fixed it by setting pyplot parameter:
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'serif'
so you can use fonts (Helvetica, Times New Roman) like the following:
ax.set_title('your_title_text',fontname="Times New Roman", fontsize=20)
回答8:
I am in macOS with jupyter notebook, I solved with the following, first close your jupyter notebook. Then find out the font path by doing the following in Python
import matplotlib
print(matplotlib.matplotlib_fname())
it prints /Users/zyy/anaconda2/lib/python2.7/site-packages/matplotlib/mpl-data/matplotlibrc
for me, notice matplotlibrc
is a file, not a directory.
Then download font SimHei, and copy it to the directory fonts/ttf
under the mpl-data/
directory above.
Delete directory ~/.cache/matplotlib
and restart your jupyter notebook, everything should be good.
回答9:
It took me many hours to finally figure out that I needed to update matplotlib.
My original version of 3.0.3
(which came with my jupyter-datascience docker image) would give me this error, but updating to 3.1.1
fixed it.
In the end, my docker script:
RUN pip install matplotlib==3.1.1
COPY fonts /usr/share/fonts/truetype/
RUN fc-cache -fv
RUN rm /home/jovyan/.cache/matplotlib -rf
is what did it for me.
来源:https://stackoverflow.com/questions/42097053/matplotlib-cannot-find-basic-fonts