python-matplotlib画图中文显示不出来

2018/4/21 posted in  Python
import matplotlib as mpl
import matplotlib.pyplot as plt

## 设置字符集,防止中文乱码
mpl.rcParams['font.sans-serif']=[u'simHei']
mpl.rcParams['axes.unicode_minus']=False

已经在代码中设置了字符集,但是却仍然无法正确显示.这是因为系统中没有这个字体

解决方案

1. 下载SimHei.ttf字体

http://www.fontpalace.com/font-details/SimHei/

2. 查看matplotlib的字体存放目录

/Users/hushiwei/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data
total 64
drwxr-xr-x   6 hushiwei  staff    192  1 18 12:03 ./
drwxr-xr-x  86 hushiwei  staff   2752  1 18 12:03 ../
drwxr-xr-x   5 hushiwei  staff    160  1 18 12:03 fonts/
drwxr-xr-x  58 hushiwei  staff   1856  1 18 12:03 images/
-rw-rw-r--   2 hushiwei  staff  31975 10 10  2017 matplotlibrc
drwxr-xr-x  27 hushiwei  staff    864  1 18 12:03 stylelib/

3. 导入字体,删除缓存

将我们刚刚下载好的字体,SimHei.ttf文件​,放在matplotlib的font目录(./matplotlib/mpl-data/fonts/ttf/)或者系统的font目录下都行(/usr/share/fonts/)

接着:
​删除/Users/hushiwei/.matplotlib/*目录,重新运行你的画图脚本;此时程序会自动在~/.matplotlib目录下生成fontList.json文件;

4. 重启jupyter ,重新执行代码.

OK,完成....

总结

  1. 需要在代码中引入字符集.
  2. 系统中需要有这个字体.
  3. 导入字体后,若要生效,需要先删除~/.matplotlib目录,让这个目录中的文件重新生成.