使用matplotlib缺失中文字体的解决方案

出现问题

当我们用matplotlib作图时中文乱码,往往会发现中文的文字变成了小方块。

import matplotlib.pyplot as plt
plt.rcParams[font.sans-serif]=[SimHei] 

尽管我们指定了中文字体。这时可能会因为系统中缺失中文字体而导致不能显示。具体表现就是,运行过程中报warning:

lib/python3.7/site-packages/matplotlib/font_manager.py:1241: UserWarning: findfont: Font family [sans-serif] not found. Falling back to DejaVu Sans.
  (prop.get_family(), self.defaultFamily[fontext]))

解决问题

1、首选安装、拷贝对应字体到系统中。比如这里我拷贝Windows系统中的黑体(simhei.ttf)到/usr/share/fonts/windows_fonts目录。

mkdir /usr/share/fonts/windows_fonts
sudo mv ~/simhei.ttf /usr/share/fonts/windows_fonts

接下来将目录中的字体注册到系统中,让系统能够识别到这些新字体。

cd /usr/share/fonts/windows_fonts
mkfontscale
mkfontdir
fc-cache

此时再用下面的命令查看已经安装好的字体:

fc-list  #列出系统识别到的已安装字体。

我们可以看到这么一条:

使用matplotlib缺失中文字体的解决方案

此时我们会发现matplotlib作出的图中中文依旧无法正常显示,这种情况只需删除matplotlib的缓存目录(~/.cache/matplotlib)即可解决。

rm -rf ~/.cache/matplotlib

至此中文就可以正常显示了。

使用matplotlib缺失中文字体的解决方案

上一篇:vue+element 列表一列条件渲染


下一篇:队列&栈