Matplotlib 無法顯示中文

問題

將坐標或子圖描述的文字放在matplotlib的圖像中,如果有中文的話,有可能會顯示錯誤,或者無法顯示。

step1

在調用繪圖的代碼段前面加上

import sys
defaultencoding = 'utf-8'
if sys.getdefaultencoding() != defaultencoding:
    reload(sys)
    sys.setdefaultencoding(defaultencoding)

使用utf-8的編碼方式,但是用

 # -*- coding:utf-8 -*-

就會報錯,錯誤是:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 0: ordinal not in range(128)

可能是因為這樣做不是全局使用?猜的。

Step2

仍然不能正確的顯示中文,但是這時候代碼運行的時候已經不會報錯了,只是中文任然無法正常顯示,這里的原因是matplotlib沒有中文字體庫。
所以一勞永逸的方法就是把matplotlib默認的字體改成支持中文的Microsoft Yahei UI字體。
在Windows中進入anoconda中找到matplotlib 的文件夾
實驗室電腦是這個位置,具體使用的使用就依照這個相對路徑找到mpl-data 文件夾
C:\Program Files\Anaconda2\Lib\site-packages\matplotlib\mpl-data
打開
matplotlibrc
文件,找到

font.serif : Bitstream Vera Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif

把注釋去掉,然后把下載好的Microsoft Yahei UI 字體復制到

C:\Program Files\Anaconda2\Lib\site-packages\matplotlib\mpl-data\fonts\ttf

文件夾中,把Vera.ttf文件刪掉,把Microsoft Yahei UI.ttf改成 Vera.ttf
Ok,
然后運行python,就會出現下面的結果:

![西瓜書里的決策樹](http://upload-images.jianshu.io/upload_images/5685046-6bd7083f34d418cc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容