【python】matplotlib绘图显示不了中文,且没有SimHei、FangSong等字体

针对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"之后的效果:

到此,终于搞定啦!

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值