跳到正文
Petrichor's Blog
返回

Matplotlib 中文显示配置笔记

使用 Matplotlib 做科研绘图时,经常需要在标题、坐标轴、图例或注释里显示中文。Windows 通常已经自带中文字体,配置比较简单;Linux 环境则需要先确认系统里是否安装了可用的中文字体。

目录

目录

Windows 配置

Windows 一般自带微软雅黑、黑体等中文字体。可以在绘图代码开头添加:

import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["Microsoft YaHei", "SimHei"]
plt.rcParams["axes.unicode_minus"] = False

这里有两个设置:

Linux 安装中文字体

在 Ubuntu/Debian 系统中,优先推荐安装发行版维护的中文字体包:

sudo apt update
sudo apt install fonts-noto-cjk
fc-cache -fv

安装完成后,可以检查字体是否可用:

fc-match "Noto Sans CJK SC"

然后在 Python 中指定字体:

import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["Noto Sans CJK SC", "Noto Sans SC", "SimHei"]
plt.rcParams["axes.unicode_minus"] = False

指定字体文件路径

如果你通过第三方字体仓库或手动方式安装了字体,也可以直接指定字体文件。例如字体文件位于 /usr/share/fonts/MyFonts/simhei.ttf

import matplotlib.font_manager as fm
import matplotlib.pyplot as plt

font_path = "/usr/share/fonts/MyFonts/simhei.ttf"
font_prop = fm.FontProperties(fname=font_path)

plt.rcParams["font.family"] = font_prop.get_name()
plt.rcParams["axes.unicode_minus"] = False

这种方式适合字体已经存在,但 Matplotlib 没有自动匹配到字体名称的情况。

清理 Matplotlib 字体缓存

如果确认系统已经安装中文字体,但图里仍然显示方块,可能是 Matplotlib 的字体缓存没有刷新。可以删除缓存后重新运行脚本:

rm -rf ~/.cache/matplotlib

下次运行 Matplotlib 时,它会重新扫描系统字体。

最小测试代码

可以用下面这段代码快速验证中文和负号是否正常显示:

import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["Noto Sans CJK SC", "Microsoft YaHei", "SimHei"]
plt.rcParams["axes.unicode_minus"] = False

x = [-3, -2, -1, 0, 1, 2, 3]
y = [i**2 for i in x]

plt.plot(x, y, label="二次函数")
plt.title("Matplotlib 中文显示测试")
plt.xlabel("横轴")
plt.ylabel("纵轴")
plt.legend()
plt.show()

如果标题、坐标轴、图例和负号都正常显示,说明中文字体配置已经生效。


分享这篇文章:

上一篇
ChatGPT转Stripe长链接支付脚本
下一篇
uv Python 环境管理常用命令