matplotlib 中文显示乱码问题在 Windows 10 下如何配置字体

文章导读
Windows 10 下解决 matplotlib 中文乱码,最推荐在代码开头设置 rcParams 指定系统已有中文字体。适用所有 Python 脚本场景,风险是不同系统字体名称可能不一致导致配置失效。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

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 中文显示乱码问题在 Windows 10 下如何配置字体

第三步,清除 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。

matplotlib 中文显示乱码问题在 Windows 10 下如何配置字体

Linux 或 Mac 系统是否适用此方法

不适用,需要安装中文字体并指定对应名称。Windows 自带字体在其他系统不存在,Linux 通常需安装 wqy-zenhei,Mac 需指定 STHeiti 等。

修改配置后为什么还是乱码

通常是字体缓存未清除导致。删除用户目录下的.matplotlib 文件夹中的缓存文件,重新运行脚本让 matplotlib 重建字体列表。

参考来源

Matplotlib 官方文档 - Customizing matplotlib

URL: https://matplotlib.org/stable/users/explain/customizing.html