机器学习二:Mac python matplotlib Glyph xxxxx missing from current font的解决方案

1,895 阅读1分钟

背景

建立机器学习项目一般有6个步骤:

image.png (图好丑...)

在收集数据和预处理过程中:

  • 收集数据;
  • 数据可视化;
  • 数据清洗;
  • 特征工程;
  • 构建特征集和标签集;
  • 拆分训练集、验证集和测试集。

数据可视化使用matplotlib 绘图。

import matplotlib.pyplot as plt

plt.plot(df_ads['点赞数'],df_ads['浏览量'],'r.', label='Training data') # 用matplotlib.pyplot的plot方法显示散点图
plt.xlabel('点赞')
plt.ylabel('浏览')
plt.legend()
plt.show()

在运行时,报错 ”findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei“。
出现的问题就是坐标或者标题输入中文会出现乱码情况

问题原因

问题就是该版本中没有SimHei 字体。

解决方案和步骤

解决办法就是在网上下载该字体并放到 matplotlib中。具体步骤如下:

1. 下载字体

地址: link.zhihu.com/?target=htt…

2. 查找自己的python解释器里matplotlib包对应的字体库文件地址

print(matplotlib.matplotlib_fname())

3. 将下载的字体放到上述文件中

cp /Users/xxx/Desktop/SimHei.ttf  /opt/miniconda3/envs/sklearn-env/lib/python3.12/site-packages/matplotlib/mpl-data/fonts/ttf

4. 修改matplotlibrc文件

font.family:  sans-serif
# 去掉前面的# 
font.sans-serif: SimHei, DejaVu Sans, Bitstream Vera Sans,
# 去掉前面的#,并在冒号后面添加SimHei
axes.unicode_minus: False  # use Unicode for the minus symbol rather than hy    phen.  See
# 去掉前面的#,并将True改为False

5. 删除matplotlib的系统缓存

rm -rf ~/.matplotlib/*

6. 在刚刚的python文件中配置

import matplotlib.pyplot as plt
import matplotlib

# print(matplotlib.matplotlib_fname())

# print(matplotlib.get_cachedir())
plt.rcParams['font.sans-serif']=['SimHei'] 

7. 记得重启项目,再运行!

最后展示图如下: x和y轴label展示出了中文字体,搞定了。 image.png

引用文档

  1. www.cnblogs.com/jsxzhub/p/1…
  2. blog.csdn.net/weixin_3803…
  3. zhuanlan.zhihu.com/p/449589031…