matplotlib中文字体显示

1.Workspace:

  1.Ubuntu19.10
  2.conda4.8.3
  3.python3.7.6
  4.matplotlib 3.1.3

2.Problem

  近期正在学习使用matplotlib库,碰到设置字体的问题,刚好记下来,备用。

  根据网上的各种说法,先把Microsoft YaHei Mono字体粘贴到  当前python的路径/site-packages/matplotlib/mpl-data/fonts/ttf(python的路径,可以通过查看pip -V),习惯性的改名为YaHeiMono.ttf(强迫症,字体名称格式要一致),直接在添加以下代码

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

结果一直报错找不到jetbrain,百度得到可能有用的结果就是找到:当前python路径/site-packages/matplotlib/mpl-data/matplotlibrc,添加

font.family:    sans-serif
font.sans-serif: YaHeiMono

保存之后,输入代码:

import matplotlib
print(matplotlib.get_cachedir()) #/home/deathgod/.cache/matplotlib

找到cache路径后,删除cache目录下的所有文件,点击jupyter notebook下的工具栏Kernel–>restart选项重启,再点击Cell–>All Output -->clear清除之前的运行结果,结果再次报错。

  接着百度,然后想到之前清除cache目录是不是有什么关键信息。

vi /home/deathgod/.cache/matplotlib/fontlist-v330.json

主要是两个list:afmlist,ttflist,我查看了ttflist,其中有这么一段信息:

{
      "fname": "fonts/ttf/YaHeiMono.ttf",
      "name": "Microsoft YaHei Mono",
      "style": "normal",
      "variant": "normal",
      "weight": 400,
      "stretch": "normal",
      "size": "scalable",
      "__class__": "FontEntry"
},

我一看到这个name,觉得是不是我使用的name出错了,改成这样:

plt.rcParams['font.sans-serif']=['Microsoft YaHei Mono']

结果竟然真的没报错,无语。。。。。。原来调用的不是我改过的字体文件名,而是蕴含在字体信息里的字体名称。然后我又仔细看了以下ttflist下的fname,发现字体搜索路劲其实有两个:fonts/ttf,/usr/share/fonts/truetype,以后把想要使用的字体都放在这两个目录下就行了,然后再调用plt.rcParams接口,也不用更改什么matplotlibrc。

Tips: 注意serif,sans-serif,monospace三种字体类型的区别,举个例子:

plt.rcParams['font.serif']=['Microsoft YaHei Mono']

也会报错,找不到雅黑字体,这是因为雅黑是非衬线字体(sans-serif),另外说一句simhei也是非衬线字体(sans-serif)

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页