Matplotlib缺少中文字体的修复
现象
Python运行Matplotlib库显示中文报错
1 | Font family ['sans-serif'] not found.Falling back to DejaVu Sans |
修复方法(Linux)
寻找相应字体,比如
SimHei.ttf(Windows自带)将字体文件放到
/usr/share/fonts/truetype/目录或~/.local/share/fonts/运行(可能需要
sudo)fc-cache -f -v重建系统字体缓存
删除matplotlib缓存
python执行1
2
3import matplotlib
print(matplotlib.get_cachedir())
# '~/.cache/matplotlib'删除该目录
rm -rf ~/.cache/matplotlib重新测试
永久修复(Windows)
安装字体到Windows
打开C:\Windows\Fonts,确保拥有黑体(SimHei.ttf,Windows自带)或Arial Unicode MS(需要自行安装)。创建Matplotlib配置文件
查找Matplotlib文件夹:运行1
2
3import matplotlib
print(matplotlib.get_data_path())
# <PythonDir>\lib\site-packages\matplotlib\mpl-data将
matplotlibrc复制到%USERPROFILE%\.matplotlib\3。不要修改
<PythonDir>\lib\site-packages\matplotlib\mpl-data\matplotlibrc,[1-2]中描述的是错误用法。修改Matplotlib配置文件
打开%USERPROFILE%\.matplotlib\matplotlibrc文件,更新如下配置:matplotlibrc 1
2
3
4
5font.family: sans-serif
# 将字体名追加在开头
font.sans-serif: SimHei, ...
axes.unicode_minus: False
# 注:黑体没有unicode负号,因此`axes.unicode_minus`必须要设置为`False`经测试Arial Unicode MS也是可以用的
matplotlibrc 1
2
3
4font.family: sans-serif
font.sans-serif: Arial Unicode MS, ...
axes.unicode_minus: True
# 注:Arial Unicode MS符号全,`axes.unicode_minus`可以设置为`True`经测试,
font.sans-serif填入的是字体文件内部记录的字体名,而非文件名。重新测试
临时修复(Windows)
复制字体同上
在代码中修改
font.sans-serif和axes.unicode_minus配置,内容同上1
2
3
4
5
6
7
8
9
10import matplotlib.pyplot as plt
# 黑体:
if not 'SimHei' in plt.rcParams['font.sans-serif']:
plt.rcParams['font.sans-serif'].insert(0, 'SimHei')
plt.rcParams['axes.unicode_minus'] = False
# Arial Unicode MS
if not 'Arial Unicode MS' in plt.rcParams['font.sans-serif']:
plt.rcParams['font.sans-serif'].insert(0, 'Arial Unicode MS')重新测试