博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python3用matplotlib绘图出现中文乱码的问题【 Font family [u'sans-serif'] not found】
阅读量:3747 次
发布时间:2019-05-22

本文共 1613 字,大约阅读时间需要 5 分钟。

先附上一张乱码图和一张正常图

乱码图

正常显示图片

因为很多软件包都对中文不友好,所以想要使用中文,需要进行适当的调节。

在解决问题之前,我先说一下我的系统:Centos系统

针对此问题,很多资料给的都是以下的方法:

1 进入python 环境后,命令行输入以下代码:

>>import matplotlib >>print(matplotlib.matplotlib_fname())

该代码返回matplotlib的文件配置文件:matplotlibrc 的地址,比如返回

返回效果图
该地址其实使用 vi +地址打开后是一系列的注释配置文档,我们得到这个地址可以先不修改配置文件,直接进行下一步,此步就是为我们指明matplotlib加载文件的时候是在什么位置。但是因为matplotlib中没有对应的中文字体文件,所以我们需要上传中文字体到对应的文件下,就是第二步。

2 上传中文字体到matplotlib字体库

中文字体到哪里找?这里给个链接:

链接进去后:
连接点开后可以直接下载
我直接使用的那个支持中文的字体,链接点进去就可以直接下载,是黑体(simhei.ttf)的 ttf 压缩包,下载后直接解压就行。

完成字体的下载后,就可以直接通过windows / Linux 系统的文件传输软件进行传输到 /usr/local/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf/ 这个目录下,不同的安装路径可能前缀/usr/local/lib/python3.6/ 不一样,但是就是在那个文件夹下,不要传错了。

上个图例:
在这里插入图片描述

3 字体上传后,进行修改刚提到的 matplotlibrc

<1> 查找并删除font.family和font.sans-serif两行前的#<2> 并在font.sans-serif后添加中文字体SimHei, …(其余不变)<3> axes.unicode_minus  : False;使其值为False;否则无法显示负号

在修改配置文件后,其实最好还是在代码中体现下,如下:

import matplotlib.pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['font.family']='sans-serif' plt.rcParams['axes.unicode_minus'] = False

4 使用命令 rm -rf ~/.cache/matplotlib/ 删除缓存

5 重启python 环境

网上的步骤基本到此貌似就说可以用了,其实我们仍会遇到一些异常警告,

当然如果以上的步骤已经解决了您的问题,那下面的就不用再看了。

异常信息如下:

UserWarning: findfont: Font family [u’sans-serif’] not found. Falling back to DejaVu Sans
(prop.get_family(), self.defaultFamily[fontext]))

这里牵扯到 matplotlib 里面的一个py文件 python3.6/site-packages/matplotlib/font_manager.py 我给出了这个文件的大致路径,由于以上错误是说,因为找不到对应的Font Famliy 然后直接换为了默认的文件,所以这里,我们按照这个思路,可以修改这个py文件的内容。具体修改操作是:打开文件后,直接找 self.defaultFamily,进行修改为我们的 SimHei 文件,注意那个 afm 要保留,他是另一种字体文件。

在这里插入图片描述
修改完这个后,会发现下面有一个self.defaultFont
在这里插入图片描述
操作这两步,保存就行。

然后就可以尝试一下显示中文的函数了。

【以上是我的解决过程,有问题欢迎指正!】

转载地址:http://xcusn.baihongyu.com/

你可能感兴趣的文章
ANSYS——后处理中单元表(ELEMENT table)的作用、创建、使用
查看>>
在VScode上配置golang的开发环境
查看>>
leetcode每日一题---680. 验证回文字符串 Ⅱ
查看>>
leetcode每日一题---15. 三数之和
查看>>
leetcode每日一题---面试题 16.18. 模式匹配
查看>>
地主的钱袋
查看>>
招新成绩统计
查看>>
webpack
查看>>
go部署
查看>>
配置swagger--go语言
查看>>
打印杨辉三角
查看>>
java中String类中常用方法
查看>>
flutter学习笔记:第一个APP应用
查看>>
哲学家进餐问题
查看>>
Python-Opencv学习总结(一):图像读取和获取图像特征
查看>>
实验十三:导出与导入
查看>>
第十五周.
查看>>
基于MVC模式的用户登录
查看>>
Java Swing搭建QQ登录界面
查看>>
Spring常用依赖及注解的使用
查看>>