发现问题

最近再看《Python编程:从入门到实践》,学到第15章生成数据利用Pycharm中的matplotlib库进行绘图的时候,出现了一个问题,当我将所绘的图的横,纵坐标或者标题,希望加上一个中文描述的时候,比如,’横坐标’,’纵坐标’类似这样的描述方法。出现了很多人都会出现的一个问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import matplotlib.pyplot as plt

squares = [1, 4, 9, 16, 25]
fig, ax = plt.subplots()
ax.plot(squares, linewidth=3)

# 设置图标标题并给坐标轴加上标签
ax.set_title("平方数", fontsize=24)
ax.set_xlabel("值", fontsize=14)
ax.set_ylabel("值的平方", fontsize=14)

ax.tick_params(axis='both', labelsize=14)

plt.show()

结果不出意外成为了这样

寻找问题

最开始以为是我的pycharm软件的语言配置出现了问题,后来左改一下,右改一下,发现并没有什么作用,我又觉得是中文编码的问题,找了一圈没什么发现,于是在网上查询很多资料发现出现这样的问题是因为Matplotlib库中没有与所输入的中文字符匹配的语言,所以无法正常显示中文,所以在这里把解决方案分享给大家。

pycharm显示的错误如下:

UserWarning: Glyph 26041 (\N{CJK UNIFIED IDEOGRAPH-65B9}) missing from current font.
func(*args)

解决方法

首先应该查询一下matplotlib中拥有哪些语言。可以通过以下代码实现:

1
2
3
4
5
6
7
from matplotlib.font_manager import FontManager

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)

输出结果中我们可以发现一系列包含中文的语言格式,例如Microsoft YaHei,YouYuan等

对于这个问题我就比较疑惑了,既然他有最后却无法成功显示,既然他有这种语言,那么我们在程序里,将他设置成包含中文语言就可以,实现方式如下:

1
2
import matplotlib
matplotlib.rc("font", family='Microsoft YaHei')

这两行代码,就将显示图片时的语言设置成为了 Microsoft YaHei,也就是我们电脑里面常用的微软雅黑这种字体

运行程序,结果不出所料地显示了中文:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import matplotlib.pyplot as plt
import matplotlib
#设置语言为‘微软雅黑’
matplotlib.rc("font", family='Microsoft YaHei')

squares = [1, 4, 9, 16, 25]
fig, ax = plt.subplots()
ax.plot(squares, linewidth=3)

# 设置图标标题并给坐标轴加上标签
ax.set_title("平方数", fontsize=24)
ax.set_xlabel("值", fontsize=14)
ax.set_ylabel("值的平方", fontsize=14)

ax.tick_params(axis='both', labelsize=14)

plt.show()