真真地被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下的軟件中文支持仍是個問題啊。