目录
3、复制字体至 matplotlib 库 fonts/ttf 目录
博主在用 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 目录后,将其改名为该目录下已有某个字体,然后调用该改名后的字体即可☺








