0
点赞
收藏
分享

微信扫一扫

findfont: Font family [‘msyh‘] not found. Falling back to DejaVu Sans.

目录

1、指定文件路径

2、换用系统字体

3、复制字体至 matplotlib 库 fonts/ttf 目录

4、狸猫换太子


        博主在用 meplotlib 制作雷达图时,选用喜欢的微软雅黑字体(msyh.ttf),虽然字体已安装到字库,结果仍报错:

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

        font family 中并未发现该字体,也即该字体并未被注册,如何解决呢?

        Matplotlib 默认情况不支持中文,我们可以使用以下简单的方法来解决。

1、指定文件路径

        利用 matplotlib.font_manager.FontProperties() 指向字体文件路径(当前目录或绝对路径)

        示例:

import numpy as np 
from matplotlib import pyplot as plt 
import matplotlib
 
font = matplotlib.font_manager.FontProperties(fname='msyh.ttf') 
 
x = np.arange(1,11) 
y = 2*x + 5 
plt.title('线性方程', fontproperties = font)  
plt.xlabel('x 轴', fontproperties = font)
plt.ylabel("y 轴", fontproperties = font)
plt.plot(x, y) 
plt.show()

        输出结果: 

2、换用系统字体

         在换用之前,首先看一下 matplotlib.font_manager 中注册的字体:

from matplotlib import pyplot as plt
import matplotlib
fonts = sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])

for i in fonts:
    print(i)

        输出结果:

......
FZChaoCuHei-M10
FZCuHuoYi-M25S
FZFangSong-Z02
FZHei-B01
FZKai-Z03
FZLiShu-S01
FZShouJinShu-S10S
FZShuSong-Z01
FZSongS-Extended
FZSongS-Extended(SIP)
FZWeiBei-S03
FZXiHeiI-Z08
FZXiaoBiaoSong-B05
FZXiaoBiaoSong-B05S
FZXingKai-S04
FZYaoTi-M06
HYFangSongJ
HYXingKaiJ
HYZhongDengXianJ
HYZhongSongJ
HYZhuanShuF
......

        根据打印出的列表,找一个效果相近的中文字体,如FZHei-B01(方正黑体),然后添加到以下代码即可:

plt.rcParams['font.family'] = 'FZHei-B01'

3、复制字体至 matplotlib 库 fonts/ttf 目录

         这项工作在 windows 下为小菜一碟,博主所用系统为UOS,则要费一番功夫。因为相应目录为只读状态,需要解锁。

        首先,文件管理器查找 matplotlib 库 fonts/ttf 目录,右键点击复制路径:

 

         获得路径(file:///usr/local/lib/python3.7/dist-packages/matplotlib/mpl-data/fonts/ttf)以备解锁使用,具体参见:

        也可以运行下述代码获取:

>>> import matplotlib
>>> print(matplotlib.matplotlib_fname())
/usr/local/lib/python3.7/dist-packages/matplotlib/mpl-data/matplotlibrc

        解锁后,将所需字体文件拷贝至 ttf 目录 。

        其次,修改 matplotlib 库配置文件 matplotlibrc:打开后查找 font.family,其上添加下述代码:

font.family			 : sans-serif
font.sans-serif		 : SimHei
axes.unicode_minus   : False

        最后,清除 matplotlib cache 即可。

4、狸猫换太子

        这是一个偷懒的方法。将字体文件复制到matplotlib 库 fonts/ttf 目录后,将其改名为该目录下已有某个字体,然后调用该改名后的字体即可☺

举报

相关推荐

0 条评论