解决plot画图中文乱码问题(macbook上 family ‘sans-serif‘ not found)

本文讲述了在使用matplotlib绘制图表时遇到中文乱码问题,介绍了在MacOS环境下解决SimHei缺失、字体路径设置、缓存清理和matplotlibrc文件修改的方法,确保中文正常显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、matplotlib画图中文乱码问题

使用matplotlib.pyplot画图,有中文字体会显示乱码问题,这时需要添加如下代码:

import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["SimHei"]

二、macbook没有SimHei的问题

但是那之后,如果是macOs系统,又会出现另一个问题:findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei

三、解决macbook没有SimHei问题

1. 在python环境中输入以下代码,查看字体路径:

import matplotlib
matplotlib.matplotlib_fname()

结果如下:venv/lib/python3.8/site-packages/matplotlib/mpl-data/matplotlibrc

>>> import matplotlib
>>> matplotlib.matplotlib_fname()
/Users/xxx/PycharmProjects/learnPython/venv/lib/python3.8/site-packages/matplotlib/mpl-data/matplotlibrc

2. 下载所需要字体SimHei

方式一:官网下载
方式二:其他地址 官网太慢,我是在这个地址下载的
将下载好的文件放到/Users/xxx/PycharmProjects/learnPython/venv/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/路径下,如图:

在这里插入图片描述

3. 删除matplotlib的字体缓存

首先,查看matplotlib的字体缓存路径:

import matplotlib
matplotlib.get_cachedir()

结果为:

>>> import matplotlib
>>> matplotlib.get_cachedir()
'/Users/chenbinhao/.matplotlib'

删除该路径:rm -rf /Users/xxx/.matplotlib

4. 修改matplotlibrc文件

修改如下路径中的matplotlibrc文件:

在这里插入图片描述

修改为:

# 去掉前面的#号
font.family:  sans-serif
# 去掉前面的#号,并在:号后面加上SimHei
font.sans-serif: SimHei, DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
# 去掉前面的#号,并将True改为False
axes.unicode_minus: False

5. 重新运行脚本即可正常显示中文

在这里插入图片描述

在使用 Matplotlib 进行绘图时,如果尝试设置中文字体(如 `SimHei`)以解决中文显示乱码问题,但系统中缺少该字体,则会提示类似 `findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei` 的警告 [^2]。这种问题通常出现在跨平台开发或部署环境中,特别是在没有安装常见中文字体的 Linux 系统上。 ### 问题分析 Matplotlib 在渲染文本时,默认使用内置的字体配置。当用户通过 `plt.rcParams['font.sans-serif'] = ['SimHei']` 明确指定使用 `SimHei` 字体时,若系统未安装此字体或 Matplotlib 未能正确识别系统字体库,则无法找到对应的字体会导致上述警告出现 [^2]。 此外,即使设置了字体,Matplotlib 也可能会回退到默认字体,从而仍然显示为英文或乱码--- ### 解决方案 #### 1. 安装缺失字体 确保系统中已安装所需的中文字体(如 `SimHei`)。在不同操作系统下可以采取以下方式: - **Windows**:系统自带 `SimHei` 字体。 - **macOS**:可以通过系统偏好设置安装中文字体。 - **Linux**: - 可手动下载字体文件(如 `SimHei.ttf`)并复制到字体目录,例如 `~/.fonts/`。 - 或者安装常用中文字体包,如 `fonts-wqy-zenhei`、`fonts-arphic-*` 等。 ```bash sudo apt install fonts-wqy-zenhei # Debian/Ubuntu ``` #### 2. 更新 Matplotlib 字体缓存 在添加新字体后,需要清除 Matplotlib 缓存,使其重新加载字体列表: ```python import matplotlib as mpl mpl.get_cachedir() # 查看缓存路径 ``` 然后删除缓存目录下的 `fontlist-v330.json`(或其他版本号)和 `tex.cache` 文件,并重启内核或 Python 环境。 #### 3. 设置备用字体 如果不希望依赖特定字体,可以设置多个备选字体,确保至少有一个可用: ```python plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'SimHei', 'FangSong'] # 支持中文的字体列表 ``` #### 4. 使用系统字体管理器动态加载字体 也可以通过 `matplotlib.font_manager` 动态加载本地字体文件: ```python from matplotlib.font_manager import FontProperties, findfont # 加载本地字体文件(需替换为实际路径) font_path = "/usr/share/fonts/truetype/simhei.ttf" custom_font = FontProperties(fname=font_path) # 示例绘图使用自定义字体 plt.title("中文标题", fontproperties=custom_font) ``` #### 5. 禁用负号显示问题(可选) 有时中文显示正常但仍会出现负号异常的问题,可通过以下设置修复: ```python plt.rcParams['axes.unicode_minus'] = False # 正常显示负号 ``` --- ### 示例代码整合 ```python import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties # 设置中文字体和解决负号显示问题 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'SimHei'] plt.rcParams['axes.unicode_minus'] = False # 绘图测试 plt.plot([1, 2, 3], [1, 4, 9]) plt.title("Matplotlib 中文支持测试") plt.xlabel("X轴") plt.ylabel("Y轴") plt.show() ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

githubcurry

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

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

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

打赏作者

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

抵扣说明:

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

余额充值