针对matplotlib中不存在SimHei、FangSong等字体的问题
原始代码:
import matplotlib.pyplot as plt
eta_min = 0
eta_max = 0.01
T_max = 100
T = np.arange(T_max)
eta = eta_min + 0.5*(eta_max-eta_min)*(1+np.cos(np.pi*T/T_max))
plt.plot(T, eta)
plt.xlabel('训练轮次')
plt.ylabel('学习率')
plt.show()

可以看到中文无法显示。
上网搜了搜,说是要设置一下中文字体,如下:
import matplotlib.pyplot as plt
eta_min = 0
eta_max = 0.01
T_max = 100
T = np.arange(T_max)
eta = eta_min + 0.5*(eta_max-eta_min)*(1+np.cos(np.pi*T/T_max))
plt.rc("font",family="SimHei") ###增加了这一行
plt.plot(T, eta)
plt.xlabel('训练轮次')
plt.ylabel('学习率')
plt.show()
但是运行报错,画出来的图依旧是无法显示中文的:
findfont: Font family ['SimHei'] not found. Falling back to DejaVu Sans.
最后发现这篇博客,使用以下代码查找当前matplotlib所支持的所有字体:
# 查询当前系统所有字体
from matplotlib.font_manager import FontManager
import subprocess
mpl_fonts = set(f.name for f in FontManager().ttflist)
print('all font list get from matplotlib.font_manager:')
for f in sorted(mpl_fonts):
print('\t' + f)
得到的结果:
all font list get from matplotlib.font_manager:
AR PL UKai CN
AR PL UMing CN
Abyssinica SIL
Ani
AnjaliOldLipi
Chandas
Chilanka
DejaVu Math TeX Gyre
DejaVu Sans
# 有一百多条,太长了,所以只贴出来开头几个
发现我的matplotlib中并没有网上所说的SimHei、STZhongsong、FangSong等字体,看了一遍可以用的这些字体,感觉前两个(AR PL UKai CN、AR PL UMing CN)应该是中文,所以试试看:
import matplotlib.pyplot as plt
eta_min = 0
eta_max = 0.01
T_max = 100
T = np.arange(T_max)
eta = eta_min + 0.5*(eta_max-eta_min)*(1+np.cos(np.pi*T/T_max))
plt.rc("font",family="AR PL UKai CN") ###修改了这一行
plt.plot(T, eta)
plt.xlabel('训练轮次')
plt.ylabel('学习率')
plt.show()
这会可以显示中文了 :

换成"AR PL UMing CN"之后的效果:

到此,终于搞定啦!