python3用matplotlib绘图出现中文乱码UserWarning: findfont: Font family [‘sans-serif‘] not found.

问题

我利用matplotlib来绘制了一个十分简单的3D图,但是遇到了这个报错。
UserWarning: findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans (prop.get_family(), self.defaultFamily[fontext]))

下载中文字体并放到指定目录中

遇到这种问题,是matplotlib中缺乏中文字体,首先需要下载中文字体SimHei.ttf Download,并放在指定的目录上,要找到目录一般可以进入Python环境中输入以下命令就可以找到对应的目录:

>>import matplotlib 
>>print(matplotlib.matplotlib_fname())

该代码返回matplotlib的文件配置文件:matplotlibrc 的地址,比如返回。
在这里插入图片描述
SimHei.ttf 字体是放在D:\Anaconda3\Lib\site-packages\matplotlib\mpl-data\fonts\ttf目录中,字体放在这个目录中还需要修改配置文件,这个文件就是matplotlibrc 。

修改配置文件matplotlibrc

第一步,使用文本编辑器打开matplotlibrc 文件,找到font.family,并将font.family和font.sans-serif两行前的#删除;
第二步,在font.sans-serif后添加中文字体SimHei,其他的不变;
第三步可以修改axes.unicode_minus,将True改为False,作用就是解决负号’-'显示为方块的问题。
完成后结果如下:
在这里插入图片描述
第四步,修改完配置文件,重启Python环境后,还需要再代码中添加这几行代码,最好添上

plt.rcParams['font.sans-serif']=['SimHei']
#plt.rcParams['font.family']='sans-serif'  #可要可不要
plt.rcParams['axes.unicode_minus'] = False

这样就能正常运行使用,不会报错,也不会发出异常警告了

修改font_manager.py

一般正常情况下就可以看到警告已经没有了,但其实有可能还会再次遇到这个异常警告。
如:

D:\Anaconda3\lib\site-packages\matplotlib\font_manager.py:1331: 
UserWarning: findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans
  (prop.get_family(), self.defaultFamily[fontext]))

遇到这种问题可以直接找到报错的这个文件中进行修改,根据上面的错误,发现还需要修改font_manager.py内容,具体修改操作是:打开文件后,直接找 self.defaultFamily,进行修改为我们的 SimHei 文件,注意那个 afm 要保留,它是另一种字体文件。
将文件中的DejaVu Sans修改成SimHei:
原内容:
python3用matplotlib绘图出现中文乱码UserWarning: findfont: Font family [‘sans-serif‘] not found._第1张图片
修改成
在这里插入图片描述
还需要找到配置文件中找到DejaVuSans.ttf并将其修改为SimHei.ttf:
python3用matplotlib绘图出现中文乱码UserWarning: findfont: Font family [‘sans-serif‘] not found._第2张图片
修改完后就可以进行保存,然后就可以在画图中显示中文了。

参考

https://blog.csdn.net/qq_19381989/article/details/104197016
https://blog.csdn.net/qq_29750461/article/details/100560859

你可能感兴趣的:(Python,机器学习)