matplotlib对中文的支持(Font family [‘sans-serif’] not found.Falling back to DejaVu Sans)

一、问题描述:

1
2
3
4
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

使用matplotlib画图,在Windows下正常,在linux环境下中文乱码

1
Font family ['sans-serif'] not found.Falling back to DejaVu Sans

二、解决方案:
在linux环境中的matplotlib里装入SIMHEI.TTF字体即可

三、解决步骤
1、下载SIMHEI.TTF字体
2、把字体放到指定目录

1
2
3
4
5
6
7
8
# python 终端获取路径
import matplotlib    
print(matplotlib.matplotlib_fname())
#/root/anaconda3/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc

# 下载好的SIMHEI.TTF放到该目录下
# (shell)
mv ./SIMHEI.TTF /root/anaconda3/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/

3、删除matplotlib的缓冲目录

1
2
3
4
5
6
7
8
# python 终端获取缓存路径
import matplotlib
print(matplotlib.get_cachedir())
# /root/.cache/matplotlib

# 删除缓冲目录
# (shell)
rm -rf /root/.cache/matplotlib

4、修改matplotlibrc文件

1
2
3
4
5
6
7
8
9
10
# (shell)
vim /root/anaconda3/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc

# 修改的内容
 font.family         : sans-serif  
 # 去掉前面的#    
 font.sans-serif     : SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif  
 # 去掉前面的#,并在冒号后面添加SimHei
 axes.unicode_minus  : False
 # 去掉前面的#,并将True改为False