Python利用Matplotlib绘图无法显示中文字体的解决方案

2022-07-15,,,,

发现问题

我在利用pycharm中的matplotlib库进行绘图的时候,出现了一个问题,当我将所绘的图的横,纵坐标,希望加上一个中文描述的时候,比如,'横坐标','纵坐标'类似这样的描述方法。出现了很多人都会出现的一个问题。

import matplotlib.pyplot as plt
 
squares = [1, 4, 9, 16, 25]
fig, ax = plt.subplots()
ax.plot(squares, linewidth=3)
#设置图表标题并给坐标轴加上标签。
ax.set_title("主题", size=14)
ax.set_xlabel("横坐标", size=14, color='red')
ax.set_ylabel("纵坐标", size=14, color='red')
 
ax.tick_params(axis='both', labelsize=14)
plt.show()

结果不出意外成为了这样

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

pycharm显示的错误如下:

userwarning: glyph 32437 (\n{cjk unified ideograph-7eb5}) missing from current font.
  figurecanvasagg.draw(self)

解决方式:

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

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等

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

import matplotlib
matplotlib.rc("font", family='microsoft yahei')

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

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

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("主题", size=14)
ax.set_xlabel("横坐标", size=14, color='red')
ax.set_ylabel("纵坐标", size=14, color='red')
 
ax.tick_params(axis='both', labelsize=14)
plt.show()

结果如下:

参阅文献: 

《Python利用Matplotlib绘图无法显示中文字体的解决方案.doc》

下载本文的Word格式文档,以方便收藏与打印。