1. 程式人生 > >Mac系統徹底解決matplotlib中文顯示亂碼的問題

Mac系統徹底解決matplotlib中文顯示亂碼的問題

MAC OS系統解決matplotlib 中文亂碼

【Python版本2.7】

matplotlib繪圖,中文是解碼後自動輸出,而不是寫死的,所以通過FontManager指定本機中文字型目錄的辦法並不奏效。嘗試了N多辦法,被折磨了N久,放棄了N次,就在準備棄療的時候,中文終於顯示正常了。分享如下:

1、找到matplotlib 安裝的目錄,修改matplotlibrc檔案

在終端裡執行命令:
>python
>import matplotlib
>print(matplotlib.matplotlib_fname()) 

找到安裝目錄,修改matplotlibrc檔案。刪除

font.familyfont.sans-serif兩行前的#,並在font.sans-serif後新增對應的中文字型。這裡我們用的是中文簡體 SimHei,如下:

font.family          :sans-serif

font.sans-serif     : SimHei, DejaVu Serif(後面還有很多,略去)

axes.unicode_minus,將True改為False

3、將對應的字型SimHei.tff拷貝到

/Users/lqhk/Library/Python/2.7/lib/python/site-packages/matplotlib/mpl-data/fonts/ttf目錄下

4、清空快取

這一步很重要!否則其他幾步都是白忙活。一定要清空matlibplot載入字型的快取,因為載入字型的時候要讀取FontList檔案,我們新加入的字型不在這個檔案的列表,載入時必然會報找不到字型的錯:

UserWarning: findfont: Font family [u'sans-serif'] not found. Falling back to Bitstream Vera Sans
  (prop.get_family(), self.defaultFamily[fontext]))

所以我們要前進到這個坑爹的資料夾下。 Windows和centos、Ubuntu的一些清除快取的命令,可能並不適用於Mac系統!!!所以很多部落格提供的命令,直接不起作用啊!所以穩妥起見,還是手動刪除快取。有些部落格上寫的是FontList.cache,但是我的機器上沒有FontList.cache檔案,但是有一個FontList.json檔案,開啟後發現,這個檔案詳細記錄了matplotlib載入字型的名稱、路徑。檔案目路徑是:/Users/lqhk/.matplotlib/FontList.json,刪除即可。下次呼叫matplotlib時,會自動生成一個新的json檔案。

5、修改程式碼。

程式碼如下:

import matplotlib.pyplot as plt # 引入matplotlib包
plt.rcParams['font.sans-serif']=['SimHei']# 設定載入的字型名
plt.rcParams['axes.unicode_minus']=False #解決儲存影象是負號'-'顯示為方塊的問題
有中文的地方記得,前面加u,如:
 plt.title(u'這是題目 ')

其他的自動輸出中文的地方,比如通過解碼或者別的方式輸出的中文,通過這種方法是可以實現中文正常顯示的!

6、重啟Python。

擔心重啟不徹底,直接重啟電腦。。。。

寫在最後,查閱了各種部落格,先是Windows的方法對MAC不起效,然後好不容易找到了Mac的解決辦法,但是由於Mac系統版本不一致,或者matplotlib安裝方法不一致,各種方法均不奏效。具體問題還是要具體分析,根據你的系統版本做細微調整,原樣照搬未必奏效,但是每一步的具體步驟是一致的,一定要有耐心!好吧,祝你順利!只怪中文博大精深,對舶來品水土不服。。。