欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

linux系统下seaborn无法显示中文字体填坑记----未完待续

程序员文章站 2024-01-28 09:43:58
...

首先,我用fc-list :lang=zh查看了系统的中文字体,哦豁,发现了Noto Sans CJK,于是我写sns.set(font='Noto Sans CJK'),报错:

findfont: Font family ['Noto Sans CJK'] not found. Falling back to DejaVu Sans.

好吧,没办法了,看一下plt里面有啥字体吧

print(matplotlib.matplotlib_fname())

我的地址是/home/catherine/anaconda3/lib/python3.8/site-packages/matplotlib/mpl-data/matplotlibrc

也就是你安装的matplotlib的路径下的/mpl-data/matplotlibrc

注意这里文件打开全是注释,我用nano打开的,所以ctrl+W找了一下font.sans-serif,

linux系统下seaborn无法显示中文字体填坑记----未完待续

根本没有中文字体,我反手就给关了

然后找到/mpl-data下的fonts,看了看现有的字体文件(.ttf文件),想着得自己从哪里搞一个过去...

我默默打开了Windows文件管理,C盘搜索simhei.ttf

linux系统下seaborn无法显示中文字体填坑记----未完待续

然后默默把它拷到了/mpl-data下的fonts里,再次回到刚刚的那个文件去掉两行注释加入simhei

font.serif      : simhei, DejaVu Serif, Bitstrea ....
font.sans-serif : simhei, DejaVu Sans, Bitstream Vera Sans, ...

去看一下字体列表

cd ~/.cache/matplotlib

linux系统下seaborn无法显示中文字体填坑记----未完待续

nano一下fontlist-v310.json文件,加入如下代码

    {
      "fname": "fonts/ttf/simhei.ttf",
      "name": "simhei",
      "style": "normal",
      "variant": "normal",
      "weight": 400,
      "stretch": "normal",
      "size": "scalable",
      "__class__": "FontEntry"
    },

感觉自己离成功进了一步,接下来用

sns.set_style("darkgrid",{"font.sans-serif":['simhei','Droid Sans Fallback']})

好的,报错没了,中文字体有了,日期和数字乱码了,问题好像更复杂了呢,,,真开心。