这两天被这个中文正负号的问题困扰了很久,网上的方法试了好多,然后并没有什么卵用
老规矩开发环境 操作系统: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代码
图片如下所示:中文字符显示正常了,没有了框框好舒服
{
"fname": "/usr/share/fonts/truetype/noto/Simhei.ttf",
"name": "SimHei",
"style": "normal",
"variant": "normal",
"weight": 400,
"stretch": "normal",
"size": "scalable",
"__class__": "FontEntry"
},
收尾 happy–end
有第一种方式好用的麻烦告诉一下,求教一下