跳到主要内容

解决 Matplotlib 中文显示问题

一、字体缺失中文字体导致的显示错误

当 Matplotlib 提示找不到中文字体时,说明其字体库中缺少必要的中文字体文件,需要手动添加所需字体。

步骤 1:准备中文字体文件

  1. 推荐下载以下常用中文字体(点击即可获取):

    (如需其他字体,可自行下载 TrueType 格式的中文字体文件)

  2. 将下载的字体文件移动到你的工作空间中

步骤 2:安装字体到 Matplotlib 字体库

  1. 首先进入 Matplotlib 的字体目录,在终端中执行:

    cd /root/.pyenv/versions/3.11.1/lib/python3.11/site-packages/matplotlib/mpl-data/fonts/ttf

    注意:这里修改的 3.11.1 python 版本,如需修改其他版本的需根据类似目录找到字体路径

  2. 将工作空间中的字体文件移动到该目录,使用mv命令:

    mv /workspace/字体文件名.ttf .

    例如移动黑体文件:

    mv /workspace/SimHei.ttf .

步骤 3:验证字体安装

在终端中执行 ll 命令,查看字体文件是否已成功移动到字体目录中,确认文件名正确显示。

二、字体存在但中文无法正常显示

若已确认存在中文字体但仍显示乱码或方块,通常是由于 Matplotlib 默认字体设置未包含中文字体导致的。

方案 1:临时配置(仅当前代码文件有效)

在代码开头添加字体设置,立即生效且不影响全局配置:

import matplotlib.pyplot as plt

# 设置字体,支持中文显示
plt.rcParams["font.family"] = ["SimHei", "SimSun", "Microsoft-YaHei"]
# 解决负号显示问题(可选)
plt.rcParams['axes.unicode_minus'] = False # 正确显示负号

添加上述代码后,后续绘图中的中文标题、标签等即可正常显示。

方案 2:永久设置(修改配置文件)

通过修改 Matplotlib 配置文件,使其默认支持中文显示: 1, 首先获取配置文件路径,在 Jupyter 中执行:

import matplotlib
print(matplotlib.matplotlib_fname())

执行后会输出类似 /xxx/matplotlibrc 的文件路径

  1. 打开该配置文件(可通过全局搜索来执行)

  2. 找到并修改以下配置(约 269 行附近):

    # 字体族设置,添加中文字体
    font.family : sans-serif
    # 字体列表,优先使用前面的字体
    font.sans-serif : SimHei, SimSun, Microsoft-YaHei
    # 解决负号显示问题
    axes.unicode_minus : False
  3. 保存修改并重启 Jupyter 内核,配置即可生效

完成以上设置后,Matplotlib 绘图时该工作空间将自动使用中文字体,无需每次手动配置。