这个问题很坑,看了几十个帖子,都没解决掉,最终自己猜了出来,记录以下。
大多数帖子的思路是一致的,如下面这些
https://blog.csdn.net/mr_muli/article/details/89485619
思路步骤就是:
1. 下载simhei字体
2. 复制到matplotlib下的ttf文件夹
3. 更改matplotlibrc文件
4. 删除cache里的文件
————————————————————————————————————
首先,上面的做法应该是没用的,因为你再次运行代码后,可以取cache文件夹里去看,新生成的.json文件里,是搜索不到simhei这个字体的,说明你的操作没用。
再次执行依然报错
findfont: Font family ['simhei'] not found. Falling back to DejaVu Sans.
有的帖子说道,可以通过
from matplotlib.font_manager import _rebuild
来重新编译
我的matplotlib里没有这个rebuild函数,不知道是不是版本问题
至此,基本可以定位问题
就是你修改matplotlibrc文件,这个字体并没有被导入matplotlib里,所以依旧无法显示中文
——————————————————————————————————————————
解决方法:
1. 执行fc-list :lang=zh命令,可以查看系统已安装了哪些中文字体

可以看到,其实我的ubuntu系统里已经装了很多中文字体,只是matplotlib无法用而已。
比如这里,有个叫ukai.ttc的文件,推测应当是楷体
那么思路就是如何让matlib导入这个楷体
2. 查看matplotlib的当前字体库情况
from matplotlib import font_manager
for font in font_manager.fontManager.ttflist:
print(font.name,'---',font.fname)
执行上述代码,可以看到当前matplot里所有的字体库

可以看到,在matplotlib的库里,是可以识别到系统已安装的这个ukai.ttc文件
那如何导入呢?
3. 修改matplotlibrc文件
我的路径是在
~/anaconda3/envs/mm/lib/python3.7/site-packages/matplotlib/mpl-data下
修改如下:

最终修改这两处:
font.family : AR PL UKai CN
font.sans-serif: ukai
注意:font.family换成你已有的一个中文字体的family,即步骤2截图中打印的最开始处
font.sans-serif: 换成ttf文件的名字前缀,这里是ukai,最后,成功显示楷体

——————————————————————————————
总结:问题的本质很简单
就是安装字体,调用字体
我的最终解决方法,其实没有安装字体,只是调用了字体
修改matplotlibrc文件的本质,是修改了matplotlib的字体调用方式。

博客作者遇到matplotlib无法显示中文的问题,尝试了多种常见解决方案无效。通过fc-list命令找到系统已安装的中文字体,发现matplotlib并未正确导入。最终,通过修改matplotlibrc文件,指定了系统中存在的楷体(ukai.ttc)作为字体,成功解决了问题。关键步骤包括查看系统字体、检查matplotlib字体库、修改配置文件并指定字体。

1228

被折叠的 条评论
为什么被折叠?



