[matplotlib] Mac中文顯示亂碼

[matplotlib] Mac中文顯示亂碼

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

1.找到matplotlib 安裝的目錄

python
import matplotlib
print(matplotlib.matplotlib_fname()) 
>> /Applications/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc

2.修改matplotlibrc文件

刪除font.family和font.sans-serif兩行前的#,并在font.sans-serif后添加對應(yīng)的中文字體。這里我們用的是中文簡體 SimHei,如下:

font.family          :sans-serif
font.sans-serif     : SimHei, DejaVu Serif(后面還有很多,略去)
axes.unicode_minus,將True改為False

3.將對應(yīng)的字體SimHei.tff拷貝到

/Applications/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf

4.清空緩存
這一步很重要!否則其他幾步都是白忙活。一定要清空matlibplot加載字體的緩存,因?yàn)榧虞d字體的時候要讀取FontList文件,我們新加入的字體不在這個文件的列表,加載時必然會報找不到字體的錯:

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

有些博客上寫的是FontList.cache,Mac機(jī)器上沒有FontList.cache文件,但是有一個FontList.json文件,打開后發(fā)現(xiàn),這個文件詳細(xì)記錄了matplotlib加載字體的名稱、路徑。

rm -rf /Users/lqhk/.matplotlib/FontList.json  # 刪除即可

下次調(diào)用matplotlib時,會自動生成一個新的json文件。

5.修改代碼。

import matplotlib.pyplot as plt # 引入matplotlib包
plt.rcParams['font.sans-serif']=['SimHei']# 設(shè)置加載的字體名
plt.rcParams['axes.unicode_minus']=False #解決保存圖像是負(fù)號'-'顯示為方塊的問題

有中文的地方記得,前面加u,如:

plt.title(u'這是題目 ')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容