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来绘制了一个十分简单的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:
原内容:
修改成
还需要找到配置文件中找到DejaVuSans.ttf并将其修改为SimHei.ttf:
修改完后就可以进行保存,然后就可以在画图中显示中文了。
参考
https://blog.csdn.net/qq_19381989/article/details/104197016
https://blog.csdn.net/qq_29750461/article/details/100560859
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)