Python:matplotlib 中文乱码的解决方案

最近手头有公司的数据资源,正好拿来练习了 matplotlib 的画图,期间碰到一个坑,就是中文在图表中显示的是方框。在查询网上各种资料并实践后,我分享一下我试验成功的解决方案。

本文针对 Mac 系统,其他系统也可参考本文。

原因

出现中文乱码是因为 matplotlib 库中没有中文字体,所以显示出来的不像是真正的乱码,而是都为方框。

解决方法

1)在终端中根据个人需求启动 python 或 python3,或者直接打开相应的 Python Launcher,执行以下两句。

import matplotlib
matplotlib.matplotlib_fname()

得到的结果就是 matplotlib 包所在的文件夹位置,我得到的路径是 '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc',截图如下。(mac 以外的系统得到的路径差别会很大)

2)进入上一步得到的路径,打开 matplotlibrc 配置文件,找到以 #font.sans-serif 开头的那一行,去掉#,并添加 SimHei 在该参数中(如下图)。字体也可以改成别的。网上有些文章中是把 SimHei 放在参数最后,我开始也是放在最后的,没有解决问题,放到最前面就解决了问题。

3)在网上下载需要添加的字体的 ttf 文件,SimHei 的下载地址:https://www.fontpalace.com/font-details/SimHei/。下载后将文件放置在 matplotlib 包文件夹下的 /fonts/ttf 中(也就是前面matplotlibrc 配置文件所在的文件夹的 /fonts/ttf 中)。

完成这些后应该就能解决问题了。

mac 之外的系统做到这儿时可能还不能解决问题,我看到有一个帖子提到的方法或许可以解决问题(https://www.zhihu.com/question/25404709/answer/309784195 ),顺便分享一下。

改了配置之后并不会生效,需要重新加载字体,在Python中运行如下代码即可:

from matplotlib.font_manager import _rebuild

_rebuild() #reload一下

 

参考资料

https://segmentfault.com/a/1190000005144275

posted @ 2019-05-15 16:15  Zhenqi  阅读(6007)  评论(0编辑  收藏  举报