macOS python3.10出现findfont: Font family [‘sans-serif‘] not found报错的解决方法。

在做用python做三国分析作业的时候遇到了一个问题。

由于电脑原本不带simhei.tff文件,所以在使用下图代码时会出现如下报错:

 最后输出效果也是没有中文的(中文被方格代替)

问题来源:

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

  

解决方法:直接避开simhei,该用黑体。需要改写plt.rcparams相关代码,将所有系统自带的文字字体输出,然后在之中选择黑体。

plt.rcParams['font.sans-serif'] = ['Heiti TC']
plt.rcParams['font.family'] = ['Heiti TC']
plt.rcParams['axes.unicode_minus'] = False

现在输出效果如下:

<think>好的,我现在需要帮助用户解决matplotlib中出现的字体系列&#39;sans-serif&#39;未找到的问题,具体错误是“findfont: Font family [&#39;sans-serif&#39;] not found. Falling back to DejaVu Sans”。用户还提到了想使用文泉驿微米黑(WenQuanYi Zen Hei)作为解决方案。首先,我需要回忆之前遇到类似问题的解决方法,尤其是参考用户提供的引用内容。 首先,根据引用[1]中的情况,用户提到字体家族未找到,可能涉及字体配置的问题。而引用[2]指出缓存问题可能导致字体不更新,需要清除缓存。因此,解决步骤可能包括安装所需字体、配置matplotlib的字体设置,以及清除缓存。 接下来,我需要确认用户是否已经正确安装了所需的字体,比如文泉驿微米黑。在Linux系统中,可能需要通过包管理器安装,例如`sudo apt-get install fonts-wqy-zenhei`。对于Windows用户,可能需要下载字体文件并安装到系统字体目录。 然后,配置matplotlib的字体设置。通常需要修改matplotlib的配置文件,设置font.family为&#39;sans-serif&#39;,并在font.sans-serif列表中添加对应的中文字体,比如&#39;WenQuanYi Zen Hei Sharp&#39;或&#39;Microsoft YaHei&#39;。需要确保字体名称正确,并且存在于系统中。 另外,用户可能已经修改了配置文件,但由于缓存问题导致更改未生效。这时候需要清除matplotlib的缓存目录,通常是~/.cache/matplotlib。删除该目录后,重新运行程序应该会重新生成缓存,加载正确的字体。 可能还需要在代码中显式设置字体,例如使用`plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;WenQuanYi Zen Hei&#39;]`。但有时候仅这样做还不够,必须同时处理配置文件和缓存。 需要分步骤解释这些过程,确保用户能够逐步操作。同时,生成相关问题,帮助用户进一步理解可能遇到的类似问题,比如其他字体问题、缓存影响、配置方法等。 最后,检查是否覆盖了用户提到的所有引用点,确保解决方案全面,并正确添加引用标识。需要注意中文字体名称在配置文件中的正确写法,避免拼写错误导致的问题。另外,提醒用户不同操作系统下的路径差异,比如Windows的缓存路径可能不同,需要指明。</think>### 解决matplotlib字体系列&#39;sans-serif&#39;未找到的问题 #### 问题原因 当matplotlib检测不到配置文件中指定的字体(如&#39;sans-serif&#39;)时,会自动回退到默认字体(如DejaVu Sans)。中文字体缺失或配置错误是常见原因,且缓存未更新可能导致配置失效[^1][^2]。 --- #### 解决方法 **1. 安装中文字体(以文泉驿微米黑为例)** - **Linux系统**: ```bash sudo apt-get install fonts-wqy-zenhei # 安装文泉驿微米黑 ``` - **Windows系统**: 1. 下载[文泉驿微米黑字体文件](https://github.com/zenozeng/fonts.git) 2. 右键字体文件 → "安装" **2. 配置matplotlib字体设置** - 找到matplotlib配置文件`matplotlibrc`: ```python import matplotlib print(matplotlib.matplotlib_fname()) # 输出配置文件路径 ``` - 在文件中修改以下参数: ```ini font.family : sans-serif font.sans-serif : WenQuanYi Zen Hei, DejaVu Sans, Microsoft YaHei, ... # 确保中文字体在列表首位 ``` **3. 清除matplotlib缓存** ```bash rm -rf ~/.cache/matplotlib # Linux/macOS # 或手动删除C:\Users\<用户名>\.matplotlib\fontlist-*.json(Windows) ``` **4. 验证配置(代码示例)** ```python import matplotlib.pyplot as plt plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;WenQuanYi Zen Hei&#39;] # 显式指定字体 plt.plot([1,2,3], label=&#39;测试中文&#39;) plt.legend() plt.show() ``` --- #### 关键点说明 - 字体优先级:`font.sans-serif`列表中越靠前的字体优先级越高 - 名称匹配:配置文件中的字体名称必须与系统注册名称完全一致 - 缓存机制:修改配置后必须清除缓存才能生效 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

captainfly_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值