修复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' 等字体

报错示例:

1700793946604

解决方法

问题原因

对于CentOS 7上的Python错误,提示找不到字体”SimHei”,这可能是由于系统缺少相应的字体文件导致的。

具体解决流程

  1. 手动添加黑体字体,下面代码放在代码开始处

  2. plt.rcParams['font.sans-serif']=['SimHei']
    plt.rcParams['axes.unicode_minus']=False
    
  3. 如果第一步没有解决问题,是因为程序执行过程中找不到 simhei.ttf

  4. 首先 删除你的缓存 。找到你的缓存

    import matplotlib as mpl
    print(mpl.get_cachedir())
    # /home/gn/.cache/matplotlib
    
  5. 删除这个缓存文件夹:rm -r /home/gn/.cache/matplotlib/*

  6. 下载字体放入 ~/.fonts下。点击下载

  7. cd ~/.fonts 。如果没有就 mkdir ~/.fonts

  8. 下载

    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

  1. 把四个“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())
    
  2. 删除自己之前的缓存

  3. 使用如下命令找到:

    >>> import matplotlib
    >>> matplotlib.get_cachedir() 
    
  4. 然后执行删除: rm -r /home/gn/.cache/matplotlib/*

  5. 再次绘图就没有问题了。