因matplotlib默认的字体,不支持中文,需要修改字体才能解决中文乱码的问题。
1. 查看Linux系统支持的中文字体
from matplotlib.font_manager import FontManager
import subprocess
fm = FontManager()
# 列出所有ttf字体
mat_fonts = set(f.name for f in fm.ttflist)
# mat_fonts
# 列出系统支持的中文字体
output = subprocess.check_output('fc-list :lang=zh -f "%{family}\n"', shell=True)
output = set([x.split(",", 1)[0] for x in output.decode().split('\n')])
# 输出可用的中文字体
print(mat_fonts & output)
2. 修改字体
plt.rcParams['font.sans-serif'] = 'Noto Sans CJK JP' #Linux系统
# plt.rcParams['font.sans-serif']='SimHei'#Widnows系统
#plt.rcParams['font.sans-serif']='Heiti'#Mac O5系统
plt.rcParams['axes.unicode_minus'] = False
3. 自定义安装字体的方法
下载字体,并放入~/.fonts目录下,如没有该目录,可以用mkdir ~/.fonts新建
http://129.204.205.246/downloads/SimHei.ttf
再执行 fc-cache -fv 刷新字体缓存
查看配置文件
>>> import matplotlib
>>> matplotlib.matplotlib_fname()
修改配置文件
# 去掉前面的#号
font.family: sans-serif
# 去掉前面的#号,并在:号后面加上SimHei
font.sans-serif: SimHei, DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
# 去掉前面的#号,并将True改为False
axes.unicode_minus: False