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),再清空缓存即可。

相关推荐
Pyeako9 小时前
Python数据可视化--matplotlib库
python·matplotlib·数据可视化·画图·pylab
背心2块钱包邮3 天前
第9节——部分分式积分(Partial Fraction Decomposition)
人工智能·python·算法·机器学习·matplotlib
数据科学项目实践3 天前
建模步骤 3 :数据探索(EDA) — 1、初步了解数据:自定义函数
大数据·人工智能·python·机器学习·matplotlib·数据可视化
薛不痒6 天前
机器学习之python的matplotlib库和sklearn库
python·机器学习·matplotlib
wadesir8 天前
用Python实现ggplot2风格绘图(零基础入门Seaborn与Matplotlib美化技巧)
开发语言·python·matplotlib
背心2块钱包邮9 天前
第7节——积分技巧(Integration Techniques)-代换积分法
人工智能·python·深度学习·matplotlib
背心2块钱包邮9 天前
第6节——微积分基本定理(Fundamental Theorem of Calculus,FTC)
人工智能·python·机器学习·matplotlib
背心2块钱包邮9 天前
第5节——定积分与面积
python·深度学习·机器学习·matplotlib
BlackPercy10 天前
[Matplotlib] 动态视频生成
python·matplotlib