ubuntu系统下matplotlib中文显示问题

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

这个问题很坑,看了几十个帖子,都没解决掉,最终自己猜了出来,记录以下。

大多数帖子的思路是一致的,如下面这些

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的字体调用方式。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值