修复matplotlib中文显示问题Font family [sans-serif] not found
问题描述
在Linux中使用python绘图时,出现找不到字体的情况,如下报错:
# 1
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
# 2 找不到 'Arial' 'Time New Roman' 等字体
报错示例:
解决方法
问题原因
对于CentOS 7上的Python错误,提示找不到字体”SimHei”,这可能是由于系统缺少相应的字体文件导致的。
具体解决流程
手动添加黑体字体,下面代码放在代码开始处
plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False
如果第一步没有解决问题,是因为程序执行过程中找不到
simhei.ttf
首先 删除你的缓存 。找到你的缓存
import matplotlib as mpl print(mpl.get_cachedir()) # /home/gn/.cache/matplotlib
删除这个缓存文件夹:
rm -r /home/gn/.cache/matplotlib/*
下载字体放入
~/.fonts
下。点击下载cd ~/.fonts
。如果没有就mkdir ~/.fonts
下载
wget http://129.204.205.246/downloads/SimHei.ttf
安装fc-cache命令
# 如果你是centos sudo yum install fontconfig -y # 如果你是ubuntu sudo apt-get install fontconfig -y # 如果你是mac brew install fontconfig
再执行 fc-cache -fv 刷新字体缓存
关于缺失Times New Roman字体
去自己的windows上复制一份字体
把四个“time new roman”文件复制到服务器上 matplotlib库对应的 fonts/ttf 文件夹下,我的路径是“/opt/anaconda3/envs/gpaw/lib/python3.11/site-packages/matplotlib-3.7.1-py3.11-linux-x86_64.egg/matplotlib/mpl-data/fonts/ttf”,该路径可以通过以下代码查看:
>>> import matplotlib >>> print(matplotlib.matplotlib_fname())
删除自己之前的缓存
使用如下命令找到:
>>> import matplotlib >>> matplotlib.get_cachedir()
然后执行删除:
rm -r /home/gn/.cache/matplotlib/*
再次绘图就没有问题了。