真真地被matplotlib的中文显示折磨的不行了。简要记下解决方案,防止以后重新配又是蛋疼菊紧。
我的环境:系统是Ubuntu 13.04,Python是系统自带的,matplotlib是apt安装的。中文字体以前有装过。
首先是编码问题
在Python代码的第二行加上编码声明(编码声明可以放在第一行或者第二行,但是第一行放shebang了):
# -*- coding:utf-8 -*-
顺便记一下在Emacs下如何查看当前编码:
M-x describe-coding-system
然后是字体问题
将/etc/matplotlibrc复制到~/.matplotlibrc/。如果配坏了就删了~/.matplotlibrc/matplotlibrc重来。
在matplotlibrc里配置字体:
font.family: sans-serif
font.sans-serif: WenQuanYi Micro Hei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
添加了文泉驿微米黑的中文字体。运行程序,仍然是方块- -
查看系统有没有文泉驿微米黑字体:
fc-list | grep WenQuanYi
有这个字体:/usr/share/fonts/truetype/wqy/wqy-microhei.ttc: WenQuanYi Micro Hei,文泉驛微米黑,文泉驿微米黑:style=Regular
再查看matplotlib找到了这个字体没:
cat ~/.matplotlib/fontList.cache | grep WenQuanYi
没有……
--------------------------------
猜测原因:matplotlib查找系统字体的时候不匹配ttc字体文件。
cat ~/.matplotlib/fontList.cache | grep '\.ttc'
没有输出。
解决方法一
暴力方法,直接把ttc字体改成ttf字体:
sudo cp wqymicrohei.ttc wqymicrohei.ttf
删除字体缓存fontList.cache,重新运行,可以显示中文了。但是保存成eps图片出错:TrueType font is missing table。因为那个ttf根本就不是ttf文件……
解决方法二
找个在线转换网站将ttc字体文件转成ttf文件。这个是我用的网站:http://www.files-conversion.com/font-converter.php
将转换后得到的ttf文件拷到/usr/share/fonts下。删除fontList.cache,重新运行,可以显示中文,也能保存eps图片了。
终极解决方案应该是让matplotlib能自动载入ttc字体文件,但是没搜到怎么配置。有没有朋友知道怎么弄的分享下?
Linux下的软件中文支持仍是个问题啊。