[matplotlib] Mac中文顯示亂碼
matplotlib繪圖纤壁,中文是解碼后自動(dòng)輸出,而不是寫死的襟雷,所以通過FontManager指定本機(jī)中文字體目錄的辦法并不奏效刃滓。嘗試了N多辦法,被折磨了N久耸弄,放棄了N次咧虎,就在準(zhǔn)備棄療的時(shí)候,中文終于顯示正常了计呈。分享如下:
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后添加對(duì)應(yīng)的中文字體征唬。這里我們用的是中文簡體 SimHei,如下:
font.family :sans-serif
font.sans-serif : SimHei, DejaVu Serif(后面還有很多茁彭,略去)
axes.unicode_minus总寒,將True改為False
3.將對(duì)應(yīng)的字體SimHei.tff拷貝到
/Applications/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf
4.清空緩存
這一步很重要!否則其他幾步都是白忙活理肺。一定要清空matlibplot加載字體的緩存摄闸,因?yàn)榧虞d字體的時(shí)候要讀取FontList文件,我們新加入的字體不在這個(gè)文件的列表妹萨,加載時(shí)必然會(huì)報(bào)找不到字體的錯(cuò):
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文件,但是有一個(gè)FontList.json文件,打開后發(fā)現(xiàn)眠副,這個(gè)文件詳細(xì)記錄了matplotlib加載字體的名稱、路徑竣稽。
rm -rf /Users/lqhk/.matplotlib/FontList.json # 刪除即可
下次調(diào)用matplotlib時(shí)囱怕,會(huì)自動(dòng)生成一個(gè)新的json文件。
5.修改代碼毫别。
import matplotlib.pyplot as plt # 引入matplotlib包
plt.rcParams['font.sans-serif']=['SimHei']# 設(shè)置加載的字體名
plt.rcParams['axes.unicode_minus']=False #解決保存圖像是負(fù)號(hào)'-'顯示為方塊的問題
有中文的地方記得娃弓,前面加u,如:
plt.title(u'這是題目 ')