Python - matplotlib 不显示中文 && findfont: Font family [‘SimHei‘] not found - IOS

一.引言

python matplotlib.plt 使用 plt.title 写标题时,标题显示为方框,无法正常显示中文,遂开始修复之旅。

Python - matplotlib 不显示中文 && findfont: Font family [‘SimHei‘] not found - IOS_第1张图片

二.解决方案

查询网上大神给出的解决方案是添加全局字体配置:

plt.rcParams['font.sans-serif'] = ['SimHei']

如果添加后运行代码无 findfont: Font family ['SimHei'] not found 报错且正常显示中文,那很奈斯,后面的就不用操作了,如果添加后显示如下报错则革命尚未成功,同志仍需努力:

 
  
  1. findfont: Font family ['SimHei'] not found. Falling back to DejaVu Sans.

  2. /Users/xxx/miniforge3/envs/macm1tf/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:240: RuntimeWarning: Glyph 23089 missing from current font.

  3. font.set_text(s, 0.0, flags=flags)

上述报错代表 matplotlib 库内没有 SimHei 字体,所以需要下载相关文件,SimHei 就是最常见的黑体。

三.安装 SimHei.ttf 并配置 matplotlib

1.下载 SimHei.ttf

下载地址: SimHei.ttf 下载地址 ,进入界面下载对应文件即可,如果下载失败也可以留下邮箱

Python - matplotlib 不显示中文 && findfont: Font family [‘SimHei‘] not found - IOS_第2张图片

2.拷贝 SimHei.ttf 到 matplotlib 的 font 文件夹  

下载成功后在自己对应的 python 程序内执行下述语句找到 matplotlib 存放 font 的位置:

 
  
  1. import matplotlib

  2. print(matplotlib.matplotlib_fname())

 会得到类似下述地址,以 matplotlibrc 结尾:

/Users/xxxx/miniforge3/envs/macm1tf/lib/python3.8/site-packages/matplotlib/mpl-data/matplotlibrc

以这个路径为基础截取至 mpl-data,然后执行下述命令拷贝 SimHei.ttf 到 font 文件夹:

 
  
  1. cd /Users/xxx/miniforge3/envs/macm1tf/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf

  2. cp /downLoadPath/SimHei.ttf .

Python - matplotlib 不显示中文 && findfont: Font family [‘SimHei‘] not found - IOS_第3张图片

3.修改 Matplotlib 配置

 
  
  1. import matplotlib

  2. print(matplotlib.matplotlib_fname())

继续通过该命令获得 matplotlib 的配置文件:

vi /Users/xxxx/miniforge3/envs/macm1tf/lib/python3.8/site-packages/matplotlib/mpl-data/matplotlibrc

执行下述命令找到如图所示相关位置:

:/sans-serif

Python - matplotlib 不显示中文 && findfont: Font family [‘SimHei‘] not found - IOS_第4张图片

修改1 :去掉 font.family 前的 # 号 (256行附近)

 
  
  1. #font.family: sans-serif

  2. font.family: sans-serif

 修改2:去掉 font.sans-serif 的 # 号,并加入 SimHei (260行附近)

 
  
  1. #font.serif: DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif

  2. font.serif: SimHei, DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif

修改3:axes.unicode_minus 修改为 False (405行附近)

 
  
  1. #axes.unicode_minus: True # use Unicode for the minus symbol rather than hyphen. See

  2. # https://en.wikipedia.org/wiki/Plus_and_minus_signs#Character_codes

  3. axes.unicode_minus: False # use Unicode for the minus symbol rather than hyphen. See

  4. # https://en.wikipedia.org/wiki/Plus_and_minus_signs#Character_codes

修改后 wq 即可,配置文件修改完毕。

4.清空原有配置

通过下述命令获取 matplotlib 缓存位置,还是在自己对应 python 项目中执行:

 
  
  1. import matplotlib

  2. print(matplotlib.get_cachedir())

通过该命令获取 cache 地址,一般在 /Users 下自己对应的账号下:

/Users/xxx/.matplotlib

执行 rm =r 斩断一切祸源:

rm -r /Users/xxx/.matplotlib

5.再次执行任务

大功告成,如果执行无效的话可以重启 pycharm 或者编辑器重试。同时也不需要再配置该参数:

# plt.rcParams['font.sans-serif'] = ['SimHei']

Python - matplotlib 不显示中文 && findfont: Font family [‘SimHei‘] not found - IOS_第5张图片

Python - matplotlib 不显示中文 && findfont: Font family [‘SimHei‘] not found - IOS_BIT_666的博客-CSDN博客_python plot findfont

你可能感兴趣的:(matplotlib,python,开发语言)