Windows 10 下解决 matplotlib 中文乱码,最推荐在代码开头设置 rcParams 指定系统已有中文字体。适用所有 Python 脚本场景,风险是不同系统字体名称可能不一致导致配置失效。
先说结论:通过修改 matplotlib 运行时配置指定 Windows 自带中文字体即可解决,无需安装额外文件。
- 适合:Windows 10 默认环境且已安装中文语言包的系统
- 先看:系统字体文件夹中是否存在 SimHei 或 Microsoft YaHei
- 建议:同时关闭 unicode 负号显示以避免负号变方块
命令速用版
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
为什么会这样
matplotlib 默认字体不包含中文字形。默认使用的 DejaVu Sans 字体主要针对西方字符设计,缺少汉字 glyph,导致渲染时显示为方框或乱码。
分步处理
第一步,确认系统可用中文字体名称。打开 C:\\Windows\\Fonts 文件夹,查看黑体或微软雅黑的文件属性,确认字体族名称通常为 SimHei 或 Microsoft YaHei。
第二步,在 Python 脚本导入 pyplot 后立即设置参数。将上述命令速用版代码放在 import matplotlib.pyplot as plt 之后,绘图命令之前。
第三步,清除 matplotlib 字体缓存。如果修改配置后仍未生效,删除 C:\\Users\\用户名\\.matplotlib 文件夹下的 fontlist-v3xx.json 缓存文件。
怎么验证是否生效
运行包含中文标题或标签的绘图代码,观察生成的图片文件。中文字符正常显示且负号未变成方块即表示配置生效。
常见坑
字体名称大小写敏感,SimHei 不能写成 simhei。只设置字体不关闭 unicode_minus 会导致负号显示为方块。永久配置文件修改后需要重启 Python 环境才能加载。
常见问题
如何永久修改配置不用每次写代码
找到 matplotlibrc 配置文件进行修改。运行 python -c "import matplotlib; print(matplotlib.get_configdir())" 找到配置目录,编辑其中的 matplotlibrc 文件,取消 font.sans-serif 注释并填入 SimHei。
Linux 或 Mac 系统是否适用此方法
不适用,需要安装中文字体并指定对应名称。Windows 自带字体在其他系统不存在,Linux 通常需安装 wqy-zenhei,Mac 需指定 STHeiti 等。
修改配置后为什么还是乱码
通常是字体缓存未清除导致。删除用户目录下的.matplotlib 文件夹中的缓存文件,重新运行脚本让 matplotlib 重建字体列表。
参考来源
Matplotlib 官方文档 - Customizing matplotlib
URL: https://matplotlib.org/stable/users/explain/customizing.html