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')

结果如下图所示:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/hfutzhouyonghang/article/details/81104107