Matplotlib不能显示中文 — Font family ['sans-serif'] not found警告

Tabitha ·
更新时间:2024-09-20
· 965 次阅读

Matplotlib不能显示中文和正负号的问题

这两天被这个中文正负号的问题困扰了很久,网上的方法试了好多,然后并没有什么卵用

老规矩开发环境 操作系统:Ubuntu19.10 开发IDE: Pycharm20.1 开发工具:Anaconda python3.7 确定下面的问题前 请确定你的Python代码中有这两句话: Very 重要 plt.rcParams['font.sans-serif'] = ['SimHei'] mpl.rcParams['axes.unicode_minus'] = False 遇到的报错(其实是警告)

findfont: Font family [‘sans-serif’] not found. Falling back to DejaVu Sans.
这里是因为Matplotlib 画图的时候使用了中文,而现在这玩意还不支持中文字体,这就很尴尬了
画出来的图emmm就是哪里不太对
在这里插入图片描述
这里的图片x,y轴的名字全框框,坐标系的名字也是框框

注意下面的第一种解决方案,博主实际操作了一下,但是按照这个方案并不能解决博主的问题,可以看第二种解决方案

解决方案(第一种:反正这种我没有解决) 准备工作 下载:simhei.ttf 解压放置一旁准备 在终端下打开python 的环境 >>> import matplotlib >>> print(matplotlib.matplotlib_fname()) /home/yyy/anaconda3/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc # matplotlibrc 是个可编辑文件,要去上一级目录的哦

重点是下面

进入下面目录->将洗净切好的simhei.tff 文件 拷贝到下面的路径下 cd /home/yyy/anaconda3/lib/python3.7/site-packages/matplotlib/mpl-data/fonts 然后我们去编辑 /home/yyy/anaconda3/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc

更改如下内容, 将前面的#号去掉,如果是Ubuntu桌面版本就gedit吧方便, 如果是server版本那就vim不香吗???

font.family : sans-serif font.sans-serif : SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif axes.unicode_minus,将True改为False,作用就是解决负号'-'显示为方块的问题 然后需要删除缓存配置 cd /home/yyy/.cache rm -rf matplotlib

删除缓存再次运行程序据说会有效果,如果不行重启才会有效果,然而, 但是, 依然,-----------
报错(其实是警告)

**findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans.** 多次尝试无效,遂放弃此种骚操作 解决方案(第二种:博主的好用了) 可以逆向思维,为什么第一种方法里要删除缓存,这个缓存目录里有什么东西 cd /home/yyy/.cache/matplotlib ls fontlist-v310.json tex.cache 发现了有意思的东西,有一个字体列表json的文件: fontlist-v310.json
举例说明: "ttflist": [ // 字体列表 { "fname": "fonts/ttf/STIXSizThreeSymBol.ttf", //路径 "name": "STIXSizeThreeSym", // 字体名称 "style": "normal", "variant": "normal", "weight": "bold", "stretch": "normal", "size": "scalable", "__class__": "FontEntry" }, 分析上面的文件,发现自己通过第一种方法返给目录中的simhei.ttf 在这个 json文件里根本找不到。于是乎明白了 继续看文件发现了一个神奇的地方,在文件的后续找到了有绝对路径的字体 { "fname": "/usr/share/fonts/truetype/noto/NotoSerifDevanagari-Regular.ttf", //这个路径很重要划重点这里要考的 "name": "Noto Serif Devanagari", "style": "normal", "variant": "normal", "weight": 400, "stretch": "normal", "size": "scalable", "__class__": "FontEntry" }, 然后把洗干净准备好的 simhei.tf (博主里名称改了大写Simhei.tf, 为了跟此目录下的文件统一) 放到 /usr/share/fonts/truetype/noto路径下
继续删缓存文件 cd /home/yyy/.cache rm -rf matplotlib

然后运行我的 python代码
图片如下所示:中文字符显示正常了,没有了框框好舒服
在这里插入图片描述

再看一下我们 matplotlib 文件目录下的 fontlist-v310.json
出现了我们导入的字体文件 { "fname": "/usr/share/fonts/truetype/noto/Simhei.ttf", "name": "SimHei", "style": "normal", "variant": "normal", "weight": 400, "stretch": "normal", "size": "scalable", "__class__": "FontEntry" }, 收尾 happy–end 有第一种方式好用的麻烦告诉一下,求教一下
作者:biubiu蜗牛



found NOT sans sans-serif matplotlib font

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章
Blossom 2020-05-01
542