引言
Matplotlib是Python的一个不错的绘图框架,但是本身并不支持中文(默认配置中没有中文字体),所以如果绘图中出现了中文,会出现乱码。如图所示:
下面我们就来看看,如何愉快地解决它吧!
本人环境:macOS/Python2.7&3.6 亲测可用
方法一:一劳永逸的方法(当然只是在你的机器上,无法迁移到别人机器)
- 下载你想要的字体(这里以SimHei.ttf字体为例)
http://www.fontpalace.com/font-details/SimHei/
- 查看matplotlib的字体存放目录与查找matplotlibrc文件路径
运行如下代码:
import matplotlib
matplotlib.matplotlib_fname()
得到一个matplotlib的matplotlibrc文件路径,我的是:
/Users/David/anaconda3/envs/py27/lib/python2.7/site-packages/matplotlib/mpl-data/matplotlibrc
字体目录就在与matplotlibrc文件同级的font/ttf目录中。也就是 .../matplotlib/mpl-data/fonts/ttf中,我的字体存放目录的完整路径如下
/Users/David/anaconda3/envs/py27/lib/python2.7/site-packages/matplotlib/mpl-data/fonts/ttf
请将下载好的字体,放入这个文件夹。
- 命令行运行如下两个命令,将matplotlib的字体缓存删除
cd ~/.matplotlib/
rm -rf fontList.py3k.cache
4.修改 matplotlibrc文件设置
找到下面呆着#注释的两行:
#font.family
#font.sans-serif
先将这两行前面的#去掉。再在第二行font.sans-serif的等号后面添加一项:SimHei。
5.在你的业务代码配置下载字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
成功显示中文
如果还不成功。请重启Python、电脑,我就是重启之后生效的!
方法二:针对业务代码,进行一些调整,费事,但是可迁移
在你的业务代码签名添加如下代码。你看其实这里可以很方便地调整字体大小的。size=15
from matplotlib.font_manager import FontProperties
def getChineseFont():
return FontProperties(fname='/System/Library/Fonts/PingFang.ttc',size=15)
然后,针对plt的xlabel、ylabel、title等代码,添加如下属性。对,就是fontproperties=getChineseFont()。对于,legend,则需要添加prop=getChineseFont()
plt.title(u'乘客等级分布', fontproperties=getChineseFont()) #每一行都要添加,是不是很麻烦?
plt.ylabel(u'人数', fontproperties=getChineseFont())
plt.legend((u'头等舱',u'二等舱',u'三等舱',),loc='best',prop=getChineseFont())
效果如下:
好啦,写完啦,撒花🎉