matplotlib.pyplot 显示中文为方框(□□)的核心原因是:matplotlib 默认未加载系统中的中文字体,且默认配置禁用了中文渲染。针对你用的 Windows + Conda 环境(py310_env),下面分「临时生效(单脚本)」和「永久生效(全局)」两种方案,优先推荐临时方案(简单),永久方案一劳永逸:
核心原理
matplotlib 渲染文字依赖字体文件,Windows 自带「黑体(SimHei)」「微软雅黑(Microsoft YaHei)」「宋体(SimSun)」等中文字体,只需让 matplotlib 加载这些字体,并关闭「unicode 负号渲染限制」即可。
方案 1:临时配置(单脚本生效,最简单)
在你的 Python 脚本开头添加以下代码,每次运行脚本时临时指定中文字体,无需修改配置文件:
python
运行
import matplotlib.pyplot as plt
import matplotlib as mpl
# 1. 设置默认字体为Windows自带的中文字体(选其一即可)
# 黑体(推荐,无衬线,显示清晰)
mpl.rcParams['font.sans-serif'] = ['SimHei']
# 微软雅黑(备选)
# mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
# 宋体(备选)
# mpl.rcParams['font.sans-serif'] = ['SimSun']
# 2. 解决负号(-)显示为方块的问题(必加)
mpl.rcParams['axes.unicode_minus'] = False
# 测试:验证中文显示
plt.figure(figsize=(6, 4))
plt.plot([1, 2, 3], [5, 2, 7])
plt.title('中文标题:测试matplotlib中文显示') # 中文标题
plt.xlabel('X轴:数值') # 中文X轴
plt.ylabel('Y轴:结果') # 中文Y轴
plt.text(2, 4, '测试文本:负号-123') # 含负号的中文文本
plt.show()
运行后即可正常显示中文,无方块。
方案 2:永久配置(全局生效,一劳永逸)
如果不想每个脚本都加配置,可修改 matplotlib 的全局配置文件,永久启用中文字体:
步骤 1:找到 matplotlib 配置文件路径
在 Python 交互环境(或脚本)中执行以下代码,复制输出的 matplotlibrc 文件路径:
python
运行
import matplotlib
# 输出配置文件的绝对路径(比如:D:\software\anaconda3\envs\py310_env\lib\site-packages\matplotlib\mpl-data\matplotlibrc)
print(matplotlib.matplotlib_fname())
步骤 2:修改 matplotlibrc 配置文件
-
用记事本 / VS Code 打开上述路径的
matplotlibrc文件(注意:如果是 Conda 环境,要确保打开的是py310_env环境下的配置文件,而非 base 环境); -
找到以下两行,删除行首的 # 注释符 ,并修改内容:
ini
# 原配置:# font.sans-serif: DejaVu Sans, Bitstream Vera Sans, ... font.sans-serif: SimHei, DejaVu Sans, Bitstream Vera Sans, ... # 新增SimHei(黑体)到首位 # 原配置:# axes.unicode_minus: True axes.unicode_minus: False # 关闭unicode负号限制(保留后面的其他字体,只在开头加
SimHei,即可)
步骤 3:清除 matplotlib 字体缓存(关键!)
修改配置后需清空缓存,否则不生效:
-
执行以下代码,找到缓存目录路径: python
运行
import matplotlib # 输出缓存目录(比如:C:\Users\你的用户名\.matplotlib) print(matplotlib.get_cachedir()) -
打开该目录,删除所有文件(尤其是
fontlist-xxx.json这类字体缓存文件); -
关闭所有 Python/IDE(如 PyCharm、Jupyter),重新启动。
步骤 4:验证永久配置
运行方案 1 中的测试代码,无需添加字体配置,中文也能正常显示。
常见问题排查
-
字体名写错导致仍显示方块:Windows 系统中文字体的「英文名称」必须准确:
- 黑体:SimHei(不是 HeiTi)
- 微软雅黑:Microsoft YaHei(注意空格)
- 宋体:SimSun(不是 SongTi)
-
Conda 环境配置文件找错 :若你在
py310_env环境下运行代码,必须修改该环境下的matplotlibrc(而非 Anaconda base 环境的),否则配置不生效。 -
IDE 缓存未清空:修改配置后,务必重启 PyCharm/Jupyter/VS Code,否则 IDE 会加载旧的配置缓存。
-
特殊字体缺失 :若系统缺少 SimHei 字体(极少情况),可从其他 Windows 电脑复制
simhei.ttf字体文件,放到matplotlib的字体目录(路径:你的环境路径\Lib\site-packages\matplotlib\mpl-data\fonts\ttf),再清空缓存即可。