問題
將坐標或子圖描述的文字放在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,就會出現下面的結果:
