matplotlib解決中文亂碼


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM