1. 程式人生 > >ubtuntu環境下使用matplotlib 繪圖中文亂碼終極解決方案

ubtuntu環境下使用matplotlib 繪圖中文亂碼終極解決方案

很多童鞋都喜歡在linux環境下寫程式碼,但是Linux環境下經常會出現如下圖中文亂碼的問題,博主最近在linux下寫python程式時就遇到了matplotlib繪圖時總出現中文變成框框的情況。其他的童鞋也給出了不錯的辦法比如修改全域性環境的方法等,博主在此給出了一種比較靈活的經過驗證可用的方案。
這裡寫圖片描述

一,安裝字型庫

1,從windows系統中將字型庫拷貝到/usr/share/fonts/chinese/truetype,如果目錄不存在,可以使用管理員許可權建立一個。
2,從終端輸入以下命令

 #cd /usr/share/fonts/chinese/truetype
 #mkfontscale
 #mkfontdir
#fc-cache

如果出現命令找不到的異常,就先安裝mkfontscale

#apt-get install mkfontscale

3,最後檢視一下當前可用的中文字型

#fc-list :lang=zh-cn

這裡截取了自己電腦中的中文字型:
這裡寫圖片描述

二,python程式碼

如上圖所示,我們可以獲取到很多中文字型,每一條記錄的第一個欄位就是字型檔案的路徑。我們在python程式碼中使用我們選定的中文字型。程式碼如下:

from matplotlib.font_manager import FontProperties
from matplotlib import
rcParams myfont = FontProperties(fname='/usr/share/fonts/chinese/truetype/STSONG.TTF',size=20) myfont1 = FontProperties(fname='/usr/share/fonts/chinese/truetype/STSONG.TTF',size=10) rcParams['axes.unicode_minus']=False fig = plt.figure() ax = fig.add_subplot(1,1,1) ax.plot(randn(1000).cumsum(),'g--',label=u'函式1') ax.plot(randn(1000
)+5,label=u'函式2') ax.plot(randn(1000)+10,label=u'函式3') ax.set_xlabel(u'x軸', fontproperties=myfont) ax.set_ylabel(u'y軸', fontproperties=myfont) ax.legend(prop=myfont1,loc='best') plt.title(u'圖表', fontproperties=myfont) ticks = ax.set_xticks([0,250,500,750,1000]) lables = ax.set_xticklabels(['one','two','three','four','five'],rotation=30,fontsize='10')

結果如下圖所示:
這裡寫圖片描述