我在miniconda虚拟环境中使用Python 3上的matplotlib版本2.0.0。我正在开发一个unix科学计算集群,我没有root权限。我通常通过ipython笔记本执行python代码。如果我执行基本命令,例如:
import matplotlib.pyplot as plt
plt.scatter([1,5], [1,5])
我收到错误消息:
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]))
我希望能够使用Times New Roman字体,但即使删除了我从这里找到的字体缓存文件(fontList.py3k.cache):
import matplotlib as mpl
fm = mpl.font_manager
fm.get_cachedir()
命令:
mpl.rcParams['font.family'] = ['serif']
mpl.rcParams['font.serif'] = ['Times New Roman']
没有效果,我得到与上面相同的错误。真正的字体类型目录:
path_to_miniconda / miniconda3 / ENVS / conda34 / LIB / python3.4 /站点包/ matplotlib / MPL-数据/字体/ TTF /
其中只有40种字体:DejaVuSerif,DejaVuSans,STIX,cmb,cmt,cmy
知道可能会发生什么以及如何添加其他字体?谢谢!
答案 0 :(得分:19)
这项工作对我来说::
$ sudo apt-get install msttcorefonts -qq
答案 1 :(得分:17)
我在运行Ubuntu Xenial 64位的Vagrant VM上遇到了同样的问题。无论我安装了多少字体,matplotlib都遇到了“系统”字体名称“sans-serif”的问题。我修理了它:
sudo apt install font-manager
rm ~/.cache/matplotlib -fr
不再有关于sans-serif的错误消息。
答案 2 :(得分:10)
为了让它发挥作用,我不得不将两个当前的最佳答案结合起来。这对我有用:
$ sudo apt install msttcorefonts -qq
$ rm ~/.cache/matplotlib -rf
答案 3 :(得分:5)
针对Windows用户的解决方案,当遇到警告时:
UserWarning: findfont: Font family ['serif'] not found. Falling back to DejaVu Sans
(prop.get_family(), self.defaultFamily[fontext]))
删除位于matplotlib缓存中的字体。
缓存的位置:import matplotlib as mpl; print(mpl.font_manager.get_cachedir())
查找matplotlib的字体目录。路径可能类似于C:\Miniconda3\pkgs\matplotlib-2.2.2-py36_1\Lib\site-packages\matplotlib\mpl-data\fonts\ttf
将Computer Modern等必要字体复制到此目录。
警告可能会持续存在,但您的情节字体应该会发生相应的变化。
答案 4 :(得分:3)
我实际上解决了
import matplotlib.font_manager
答案 5 :(得分:1)
尝试上述所有方法,对我不起作用。
我解决这个问题的方法有点麻烦,因为我在运行jupyter的ubuntu服务器上使用了conda
locate -b '\mpl-data'
找到文件夹
/usr/share/matplotlib/mpl-data
然后将simhei字体添加到mpl-data中的font文件夹中。 然后删除matplotlib字体缓存
rm -rf ~/.cache/matplotlib
重新启动jupyter笔记本,它就可以工作。
答案 6 :(得分:1)
我在使用 anaconda env 时遇到了这个问题(它在其他相关情况下也很有用)。 例如,对于 base env,我检查了以下目录: /home/***/anaconda3/pkgs/matplotlib-base-3.1.3-py37hef1b27d_0/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/
并注意到我在那里安装了 DejaVuSerif.ttf,所以不要使用 plt.rcParams['font.family'] = 'Serif'< /strong> 我使用了 plt.rcParams['font.family'] = 'DeJavu Serif'(“DeJavu 和 serif”之间有一个空格)。我为我工作。
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'DeJavu Serif'
plt.rcParams['font.serif'] = ['Times New Roman']
答案 7 :(得分:0)
在gcloud VM上运行的Cloud Datalab docker映像中,我遇到了类似的问题。执行以下操作为我解决了这个问题:
$ sudo apt install msttcorefonts -qq
$ rm ~/.cache/matplotlib -rf
Here是有关如何获取在包含Datalab实例的gcloud VM上运行的docker映像的说明,以防万一。
答案 8 :(得分:0)
我通过设置pyplot参数对其进行了修复:
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'serif'
因此您可以使用如下字体(Helvetica,Times New Roman):
ax.set_title('your_title_text',fontname="Times New Roman", fontsize=20)
答案 9 :(得分:0)
我在使用jupyter笔记本电脑的macOS中,我通过以下方法解决了问题,首先关闭您的jupyter笔记本电脑。然后通过在Python中执行以下操作找出字体路径
import matplotlib
print(matplotlib.matplotlib_fname())
它为我打印/Users/zyy/anaconda2/lib/python2.7/site-packages/matplotlib/mpl-data/matplotlibrc
,请注意matplotlibrc
是文件,而不是目录。
然后下载字体SimHei,并将其复制到上方fonts/ttf
目录下的目录mpl-data/
中。
删除目录~/.cache/matplotlib
并重新启动jupyter笔记本,一切都会很好。
答案 10 :(得分:0)
我花了好几个小时才终于确定我需要更新matplotlib。
我的原始版本3.0.3
(与我的jupyter-datascience docker映像一起提供)会给我这个错误,但是更新为3.1.1
可以解决此错误。
最后,我的docker脚本:
RUN pip install matplotlib==3.1.1
COPY fonts /usr/share/fonts/truetype/
RUN fc-cache -fv
RUN rm /home/jovyan/.cache/matplotlib -rf
是我干了什么
答案 11 :(得分:0)
有一个conda程序包[1]。
因此,您真的不需要sudo
来解决此问题!
conda install -c conda-forge -y mscorefonts
重新启动jupyter和/或强制重建matplotlib字体缓存
import matplotlib
matplotlib.font_manager._rebuild()
答案 12 :(得分:0)
Windows 用户
将 matplotlib 导入为 mpl
打印(mpl.font_manager.get_cachedir())
清除整个缓存文件
最后再次导入 matplotlib
希望你也会发现它对我有用
P:S - 如果您希望可以在此之后重新启动 jupyter/ide(可选)