findfont: Font family [ ‘<fontname>‘ ] not found. Falling back to DejaVu Sans.

导读:本篇文章讲解 findfont: Font family [ ‘<fontname>‘ ] not found. Falling back to DejaVu Sans.,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

1、指定文件路径

2、换用系统字体

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

4、狸猫换太子


        博主(UOS 系统)在用 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()

        输出结果: 

findfont: Font family [ ‘<fontname>‘ ] not found. Falling back to DejaVu Sans.

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 目录,右键点击复制路径:

 findfont: Font family [ ‘<fontname>‘ ] not found. Falling back to DejaVu Sans.

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

https://blog.csdn.net/iprobobo/article/details/123230219findfont: Font family [ ‘<fontname>‘ ] not found. Falling back to DejaVu Sans.https://blog.csdn.net/iprobobo/article/details/123230219

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

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

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

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

findfont: Font family [ ‘<fontname>‘ ] not found. Falling back to DejaVu Sans.

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

        最后,清除 matplotlib cache 即可。

4、狸猫换太子

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/106937.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!