问题
将坐标或子图描述的文字放在matplotlib的图像中,如果有中文的话,有可能会显示错误,或者无法显示。
step1
在调用绘图的代码段前面加上
import sys
defaultencoding = 'utf-8'
if sys.getdefaultencoding() != defaultencoding:
reload(sys)
sys.setdefaultencoding(defaultencoding)
使用utf-8的编码方式,但是用
# -*- coding:utf-8 -*-
就会报错,错误是:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 0: ordinal not in range(128)
可能是因为这样做不是全局使用?猜的。
Step2
仍然不能正确的显示中文,但是这时候代码运行的时候已经不会报错了,只是中文任然无法正常显示,这里的原因是matplotlib没有中文字体库。
所以一劳永逸的方法就是把matplotlib默认的字体改成支持中文的Microsoft Yahei UI字体。
在Windows中进入anoconda中找到matplotlib 的文件夹
实验室电脑是这个位置,具体使用的使用就依照这个相对路径找到mpl-data 文件夹
C:\Program Files\Anaconda2\Lib\site-packages\matplotlib\mpl-data
打开
matplotlibrc
文件,找到
font.serif : Bitstream Vera Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
把注释去掉,然后把下载好的Microsoft Yahei UI 字体复制到
C:\Program Files\Anaconda2\Lib\site-packages\matplotlib\mpl-data\fonts\ttf
文件夹中,把Vera.ttf文件删掉,把Microsoft Yahei UI.ttf改成 Vera.ttf
Ok,
然后运行python,就会出现下面的结果:
![西瓜书里的决策树](http://upload-images.jianshu.io/upload_images/5685046-6bd7083f34d418cc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)