python番外(1)——matplotlib中文顯示問題
阿新 • • 發佈:2019-01-06
Ubuntu下Canopy matplotlib不顯示中文的解決方法。推薦方法二,一勞永逸!
方法一
步驟一:下載一箇中文字型,如msyh.ttf,拷貝到指定資料夾
$ sudo cp msyh.ttf /usr/share/fonts/truetype/
步驟二:在Canopy程式碼中設定字型
zhfont = mpl.font_manager.FontProperties(fname='/usr/share/fonts/truetype/msyh.ttf')
步驟三:使用時,設定fontproperties
fig = plt.figure()
ax = fig.add_subplot(1 ,1,1)
ax.set_title(u'中文',fontproperties=zhfont)
Out[4]: <matplotlib.text.Text at 0x7fee34071050>
結果:
方法二
嘗試多次後終於找到直接從配置檔案根本解決問題的方法!!!
步驟一:
找到matplotlibrc檔案(先找到備用)(筆者安裝的是Canopy)
$HOME/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/matplotlib/mpl-data
步驟二:
在該目錄下的
../fonts/ttf
中新增,中文字型,如msyh.ttf,(對應的名字為Microsoft YaHei。這個下面要用到。)
其他字型可以通過命令查詢:
$ fc-list :lang=zh
/usr/share/fonts/opentype/noto/NotoSansCJK.ttc: Noto Sans CJK TC,Noto Sans CJK TC DemiLight:style=DemiLight,Regular
/usr/share/fonts/truetype/arphic/uming.ttc: AR PL UMing TW MBE:style=Light
/usr/share/fonts/truetype/arphic/ukai.ttc: AR PL UKai CN:style=Book
/usr/share/fonts/truetype/arphic/ukai.ttc: AR PL UKai HK:style=Book
留意後面對應的名字,如Noto Sans CJK TC,後面有用。
步驟三:
在matplotlibrc檔案中找到
font.family : sans-serif
font.sans-serif : Microsoft YaHei,Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
這兩行(Ctrl+F查詢即可),取消註釋,並新增“Microsoft YaHei,”,上面的程式碼為已新增後的程式碼,儲存退出。
步驟四:
按Ctrl+H顯示隱藏檔案,會在$HOME下看到/.cache/資料夾:
$HOME/.cache/matplotlib
找到資料夾下的fontList.cache檔案(原本里面並沒有msyh.ttf這個字型),刪除(每次啟動Canopy時,該檔案會自動生成)。重啟後再檢視該檔案,就可以發現這個字型了。
最終成果
完成上述步驟,再次啟動Canopy,輸入程式碼:
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.set_title(u'終於成功啦!')
Out[3]: <matplotlib.text.Text at 0x7fb7b4ef4dd0>
結果如下:
座標軸上的中文也可以顯示了: