matplotlib.pyplot 可视化显示的中文是框框(异常)

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 配置文件

  1. 用记事本 / VS Code 打开上述路径的 matplotlibrc 文件(注意:如果是 Conda 环境,要确保打开的是 py310_env 环境下的配置文件,而非 base 环境);

  2. 找到以下两行,删除行首的 # 注释符 ,并修改内容:

    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 字体缓存(关键!)

修改配置后需清空缓存,否则不生效:

  1. 执行以下代码,找到缓存目录路径: python

    运行

    复制代码
    import matplotlib
    # 输出缓存目录(比如:C:\Users\你的用户名\.matplotlib)
    print(matplotlib.get_cachedir())  
  2. 打开该目录,删除所有文件(尤其是 fontlist-xxx.json 这类字体缓存文件);

  3. 关闭所有 Python/IDE(如 PyCharm、Jupyter),重新启动。

步骤 4:验证永久配置

运行方案 1 中的测试代码,无需添加字体配置,中文也能正常显示。

常见问题排查

  1. 字体名写错导致仍显示方块:Windows 系统中文字体的「英文名称」必须准确:

    • 黑体:SimHei(不是 HeiTi)
    • 微软雅黑:Microsoft YaHei(注意空格)
    • 宋体:SimSun(不是 SongTi)
  2. Conda 环境配置文件找错 :若你在 py310_env 环境下运行代码,必须修改该环境下的 matplotlibrc(而非 Anaconda base 环境的),否则配置不生效。

  3. IDE 缓存未清空:修改配置后,务必重启 PyCharm/Jupyter/VS Code,否则 IDE 会加载旧的配置缓存。

  4. 特殊字体缺失 :若系统缺少 SimHei 字体(极少情况),可从其他 Windows 电脑复制 simhei.ttf 字体文件,放到 matplotlib 的字体目录(路径:你的环境路径\Lib\site-packages\matplotlib\mpl-data\fonts\ttf),再清空缓存即可。

相关推荐
weixin_465790911 天前
热电联产系统智能经济调度:深度强化学习的奇妙应用
matplotlib
我不爱机器学习2 天前
matplotlib如何保存单独的colorbar
matplotlib
爱喝可乐的老王5 天前
数据分析实践--数据解析购房关键
信息可视化·数据分析·pandas·matplotlib
海棠AI实验室6 天前
第 十五 章 可视化入门:Matplotlib 做出像样的图
matplotlib
渡我白衣11 天前
计算机组成原理(11):加法器
python·机器学习·numpy·pandas·matplotlib·计组·数电
老歌老听老掉牙12 天前
使用 Matplotlib 自定义坐标轴字体及刻度样式详解
python·matplotlib
AC赳赳老秦13 天前
DeepSeek教育科技应用:智能生成个性化学习规划与知识点拆解教程
前端·网络·数据库·人工智能·学习·matplotlib·deepseek
AC赳赳老秦15 天前
行业数据 benchmark 对比:DeepSeek上传数据生成竞品差距分析报告
开发语言·网络·人工智能·python·matplotlib·涛思数据·deepseek
2401_8414956416 天前
【Python高级编程】图着色动态可视化 APP
python·算法·matplotlib·tkinter·回溯法·图着色算法·动态可视化工具
laocooon52385788616 天前
对传入的 x , y 两个数组做折线图, x 对应 x 轴, y 对应 y 轴。并保存到 Task1/image1/T2.png
python·numpy·pandas·matplotlib