Matplotlib 无法显示中文

问题

将坐标或子图描述的文字放在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)

你可能感兴趣的:(Matplotlib 无法显示中文)