Weekly - issue 37

解决 Matplotlib 在 Linux 环境的中文乱码问题

环境:

  • Debian Linux 12,基本命令行系统,无 GNOME / KDE

  • Matplotlib 3.7.5

  • JupyterLab 4.0.5

  • Python 3.11

默认情况下,Matplotlib 输出的图中,中文是乱码。

使用 文泉驿微米黑 中文字体。

  1. 创建用户的字体目录。

    mkdir -p ~/.local/share/fonts
  2. 拷贝文泉驿微米黑字体,如 WenQuanWeiMiHei.ttf,至上述字体目录

    字体可从网上下载。

  3. 修改字体文件权限

    chmod 644 ~/.local/share/fonts/*.ttf
  4. 安装 fontconfig 软件包

    command -v fc-cache > /dev/null || sudo apt-get install -y fontconfig
  5. 更新字体缓存

    # 通常 Debian 会监控字体目录,不需要手动执行
    fc-cache

    此命令来自 fontconfig

    之后可执行 fc-list 命令查看输出的字体列表中是否包含文泉驿微米黑字体。

  6. Matplotlib 代码中使用中文字体

    import matplotlib.pyplot as plt
    
    # ...
    
    plt.rcParams[ "font.sans-serif" ] = [ "WenQuanYi Micro Hei" ]

如果已经启动过 JupyterLab, 删除 ~/.cache/matplotlib/fontlist-v330.json 文件,重启 JupyterLab 的 Python 内核,或重启 JupyterLab。

刷新 Matplotlib / JupyterLab 字体缓存

  1. 删除字体缓存文件

    Linux / macOS: ~/.matplotlib/fontlist-v330.json

    Windows: C:\Users\<用户名>\.matplotlib\fontlist-v330.json

    Matplotlib 3.7.5 之前的字体缓存文件可能不叫 fontlist-v330.json

  2. 重启 JupyterLab 的内核,或重启 JupyterLab。