码迷,mamicode.com
首页 > 其他好文 > 详细

matplotlib解决中文乱码

时间:2018-05-21 12:38:21      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:ttf   脚本   window   otl   重启   python2.7   inux   参考   fonts   

调试以前写的matplotlib相关脚本,中文呈方块样;重新解决一遍,感觉比以前的理解更进一步,故而记下一笔;

 

1. 首先要为matplotlib添加中文字体库;

系统字体库在/usr/share/fonts/,可以看一下配置文件/etc/fonts/fonts.conf

matplotlib字体库需要看python安装位置了,打开python,输入:

import matplotlib
matplotlib.matplotlib_fname()

得到了matplotlib的配置文件位置,应该是<python-site-packages>/matplotlib/mpl-data/matplotlibrc

matplotlib字体库的位置就是<python-site-packages>/matplotlib/mpl-data/fonts/ttf

然后从系统库中找个合适的字体放到matplotlib字体库中,可以软链过来,不过要注意,只接受ttf文件,不接受ttc文件,所以拷过来或链过来的时候,需要把文件后缀名改成.ttf;

我用的是文泉驿正黑(其它的解决方案中有用微软雅黑的,当然前提是你自己从windows搞了雅黑字库进linux,不在本文讨论范围,这里用了linux发行版通常会配备的文泉驿字体);于是:

ln -s /usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc <python-site-packages>/matplotlib/mpl-data/fonts/ttf/wqy-zenhei.ttf

不论如何,这里建议用黑体字,因为黑体是无衬线字(sans-serif),下面会讲;

 

如何确认字体文件放进来之后生效了呢?

删除~/.cache/matplotlib/fontList.json,重启python,from matplotlib.font_managerimport FontManager,应该会重新生成~/.cache/matplotlib/fontList.json,打开该文件,查看是否加载了新加的文体库;

(补充:python2.7环境下,cache文件是~/.cache/matplotlib/fontList.cache)

更有效的方法是用以下python代码检查matplotlib识别到的字体:

from matplotlib.font_manager import FontManager

fm = FontManager()
for f in fm.ttflist:
    print (f.name)

  

 

2. 然后需要配置matplotlib启用中文字体

打开刚才的matplotlib配置文件<python-site-packages>/matplotlib/mpl-data/matplotlibrc

找到这一行:#font.family         : sans-serif

这一行可以不需要反注释掉,因为默认就是用sans-serif;

然后找到#font.sans-serif,把这一行反注释掉,然后把“WenQuanYi Zen Hei”加到第一个位置上;

 

上面说过建议用黑体,因为黑体是sans-serif字体,如果换个宋体加在这里是不合理的(虽然可能可行,但不合理,未试);

如果用宋体的话,建议把font.family换成serif,然后把宋体字加到font.serif里;

 

参考:

https://segmentfault.com/a/1190000005144275

https://www.zhihu.com/question/25404709

matplotlib解决中文乱码

标签:ttf   脚本   window   otl   重启   python2.7   inux   参考   fonts   

原文地址:https://www.cnblogs.com/ZisZ/p/9065992.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!