調試以前寫的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_manager
import
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