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