linux python解决中文字体Font family ['sans-serif'] not found. Falling back to DejaVu Sans

python | 2022-03-16 11:56:20

1.异常

我的python代码如下

import  matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文字体设置
plt.title('中华人民共和国')
plt.plot([1,2,3,4],['一','二','三','四'],color="b",linestyle = ":")
plt.show()

抛出异常

findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei

2.解决

通过python找到python字体目录

import matplotlib 
print(matplotlib.matplotlib_fname())

输出

/usr/local/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc

把windows上的 C:WindowsFonts 字体文件 复制到/usr/local/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf

然后找到python字体缓存文件

import matplotlib
print(matplotlib.get_cachedir())

输出:/root/.cache/matplotlib

删除缓存:rm -rf /root/.cache/matplotlib/*

等会运行python缓存文件就会自动生成

到这里我已经解决了

如果还没有解决

修改 matplotlibrc

/usr/local/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

 

登录后即可回复 登录 | 注册
    
关注编程学问公众号