ubtuntu環境下使用matplotlib 繪圖中文亂碼終極解決方案
阿新 • • 發佈:2018-12-30
很多童鞋都喜歡在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')
結果如下圖所示: