matplotlib 画图时中文乱码问题的解决

一、报错信息

RuntimeWarning: Glyph 20108 missing from current font. font.set_text(s, 0.0, flags=flags)

原因:matplotlib中文乱码

二、解决方法

1、有中文字体

直接加入下面的两行代码即可正常显示

plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号

2、无中文字体

此时加入上面两行代码后依旧报错。处理方法是:

1)找到 python 中保存字体的目录

C:\Users\xxxxx>python
Python 3.7.0 (default, Jun 28 2018, 08:04:48) [MSC v.1912 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>import matplotlib    
>>>print(matplotlib.matplotlib_fname())
D:\Anaconda531\lib\site-packages\matplotlib\mpl-data\matplotlibrc

2)下载并保存字体文件
在网上搜一下相应的 .ttf 格式字体文件(比如这里的 SimHei 字体),随便找个网站下载,然后文件放入以下目录。

D:\Anaconda531\Lib\site-packages\matplotlib\mpl-data\fonts\ttf

3)清理旧缓存文件
在python环境中查看缓存文件的路径。

>>> import matplotlib
>>> matplotlib.get_cachedir()
'C:\\Users\\xxxxx\\.matplotlib'

将这个缓存目录删掉。

4)修改配置文件 matplotlibrc

D:\Anaconda531\Lib\site-packages\matplotlib\mpl-data\matplotlibrc

将这个配置文件(没有扩展名的)打开,修改以下内容

 #  去掉 # 注释   
 font.family         : sans-serif   

 #  去掉 # 注释,冒号后添加 SimHei
 font.sans-serif: SimHei, DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif

 #  去掉 # 注释,将 True 改为 False
 axes.unicode_minus  : False

5)重新切换回 ide 中,运行代码。
正常情况下,这个时候应该能够解决问题。此时,

plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号

这两句可以注释掉了。

参考资料:
https://www.cnblogs.com/swiftyao/p/14200373.html

你可能感兴趣的:(matplotlib 画图时中文乱码问题的解决)