首页 > 编程语言 >Python - matplotlib 不显示中文 && findfont: Font family ['simsun'] not found

Python - matplotlib 不显示中文 && findfont: Font family ['simsun'] not found

时间:2023-05-26 16:46:04浏览次数:48  
标签:simsun family Python matplotlib serif font minus

一.发现问题

python matplotlib.plt 使用 plt.title 写标题时,标题显示为方框,无法正常显示中文,遂开始修复之旅。

二.尝试解决

查询网上大神给出的解决方案是添加全局字体配置:

plt.rcParams['font.sans-serif'] = ['simsun']

如果添加后运行代码无 findfont: Font family ['simsun'] not found 报错且正常显示中文,那很奈斯,后面的就不用操作了,如果添加后显示如下报错则革命尚未成功,同志仍需努力:

findfont: Font family ['simsun'] not found. Falling back to DejaVu Sans.
/Users/xxx/miniforge3/envs/macm1tf/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:240: RuntimeWarning: Glyph 23089 missing from current font.
  font.set_text(s, 0.0, flags=flags)

上述报错代表 matplotlib 库内没有 simsun 字体,所以需要下载相关文件,simsun 就是最常见的宋体。

三.安装 simsun.ttc 并配置 matplotlib

1.下载对应字体

可以在其他Windows电脑上找到对应字体,或者自己下载对应字体

2.拷贝 simsun.ttc 到 matplotlib 的 font 文件夹

找到对应字体后在自己对应的 python 程序内执行下述语句找到 matplotlib 存放 font 的位置:

import matplotlib
print(matplotlib.matplotlib_fname())

会得到类似下述地址,以 matplotlibrc 结尾:

/Users/xxxx/miniforge3/envs/macm1tf/lib/python3.8/site-packages/matplotlib/mpl-data/matplotlibrc

以这个路径为基础截取至 mpl-data,然后执行下述命令拷贝 simsun.ttc 到 font 文件夹:

cd /Users/xxx/miniforge3/envs/macm1tf/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf
cp /downLoadPath/simsun.ttc .

3.修改 Matplotlib 配置

import matplotlib
print(matplotlib.matplotlib_fname())

继续通过该命令获得 matplotlib 的配置文件:

vim /Users/xxxx/miniforge3/envs/macm1tf/lib/python3.8/site-packages/matplotlib/mpl-data/matplotlibrc

执行下述命令找到如图所示相关位置:

/font.family

修改1 :去掉 font.family 前的 # 号 (256行附近)

#font.family:  sans-serif
↓
font.family:  sans-serif

修改2:去掉 font.sans-serif 的 # 号,并加入 simsun (260行附近)

#font.serif:      DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
↓
font.serif:      DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif, simsun 

修改3:axes.unicode_minus 修改为 False (405行附近)

#axes.unicode_minus: True # use Unicode for the minus symbol rather than hyphen.  See
                           # https://en.wikipedia.org/wiki/Plus_and_minus_signs#Character_codes
↓
axes.unicode_minus: False # use Unicode for the minus symbol rather than hyphen.  See
                           # https://en.wikipedia.org/wiki/Plus_and_minus_signs#Character_codes

修改后 :wq 即可,配置文件修改完毕。

4.清空原有配置

通过下述命令获取 matplotlib 缓存位置,还是在自己对应 python 项目中执行:

import matplotlib
print(matplotlib.get_cachedir())

通过该命令获取 cache 地址,一般在 /Users 下自己对应的账号下:

/Users/xxx/.matplotlib

执行 rm =r 斩断一切祸源:

rm -r /Users/xxx/.matplotlib

5.再次执行任务

大功告成,如果执行无效的话可以重启 pycharm 或者编辑器重试。同时也不需要再配置该参数:

标签:simsun,family,Python,matplotlib,serif,font,minus
From: https://www.cnblogs.com/safe-rabbit/p/17435140.html

相关文章

  • Python默认编码错误SyntaxError: Non-ASCII character '\xe5'之解决方法
    在编写Python时,当使用中文输出或注释时运行脚本,会提示错误信息:解决方法:python的默认编码文件是用的ASCII码,你将文件存成了UTF-8!!!(文件中存在中文或者其他语言,就会出现此问题!)解决办法很简单!!!在文件开头加入:# -*- coding: U......
  • Python:实现多态
    定义一个在校人的基类,分别派生出教师和学生,然后放入列表中,实现多态。#!/usr/bin/python#Filename:inherit.pyclassSchoolMember:'''Representsanyschoolmember.'''def__init__(self,name,age):self.name=nameself.age=age......
  • Python:简单的文件备份脚本
    文件备份脚本,实现了按照日期归类,时间建备份文件的功能,还能加入用户的备注信息。#!/usr/bin/python#Filename:backup_ver3.pyimportosimporttime#1.sourcefilewhichtobebackedup.source=['/home/shibo/Code']#2.targetpathwhicharebackedupto.target_dir......
  • Python:模拟linux命令cat
    模拟linux的cat命令,打印从命令行输入的文件名#!/usr/bin/python#Filename:cat.pyhelpString='''\Thisprogramprintsfilestothestandardoutput.Anynumberoffilescanbespecified.Optionsinclude:--version:Printstheversionnumber--help:Display......
  • Python:使用cPickle储存器存储对象
    一个简单的例子,演示了怎么使用cPickle存储对象#!/usr/bin/python#Filename:pickling.pyimportcPickleaspshoplistfile='shoplist.data'shoplist=['apple','mango','carrot']f=file(shoplistfile,'w')p.dump(shoplist,......
  • python中的exec()函数的作用
    exec语句用来执行储存在字符串或文件中的Python语句。例如,我们可以在运行时生成一个包含Python代码的字符串,然后使用exec语句执行这些语句。下面是一个简单的例子。>>>exec'print"HelloWorld"'HelloWorld注意例子中exec语句的用法和eval_r(),execfile()是不一样的.exec......
  • 编译安装python3.11.3
     1、下载源码包cd/usr/local/srcwget'https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tar.xz' 2、解压xz-dPython-3.11.3.tar.xztarzfPython-3.11.3.tar 3、安装编译工具和依赖包yum-yinstallgcc-c++openssl-devel 4、配置mkdir-p/......
  • 【Python】hmac模块_基于密钥的消息验证
    HMAC算法可以用于验证信息的完整性,这些信息可能在应用之间或者网络间传递 1、SHA加密 #-*-coding:utf-8-*-importhmacimporthashlibclasshmac_tools:def__init__(self):self.key="a12345678"defsha512Encrypt(self,msg):......
  • python生产力工具
    python做为一个使用简单,容易上手的编程语言,在大数据,人工智能出现之后,被使用的更加广泛了,通过它来写一个数据处理,挖掘更加得心应手了。IDE生产力工具PyCharm2022.2(ProfessionalEdition),属于jetbrain公司的一个产品本地安装python3.6,pip包管理工具hellowordimporthello......
  • python_操作excel
    摘自微信读书:《超简单:用Python让excel飞起来》Python处理excel的模块:xlsxWriter,xlrd,xlwt,xlutils,openpyxl,xlwings等其中:xlwings功能最强大,支持批量操作,还可与excelVBA结合使用区别如下:参考语句:importxlwingsasxwapp=xw.App(visible=False,add_book=False)foriinra......