在 Ubuntu 使用 fonts-noto-cjk 设置 Matplotlib 支持中文的完整教程

时间:2024-12-03 07:00:42

在 Ubuntu 使用 fonts-noto-cjk 设置 Matplotlib 支持中文的完整教程

    • 1. 为什么需要配置中文字体?
    • 2. 安装 `fonts-noto-cjk`
      • 安装命令:
      • 检查字体安装是否成功
    • 3. 配置 Matplotlib 支持中文
      • 3.1 手动加载字体
      • 3.2 设置全局字体(可选)
        • 修改 Matplotlib 全局配置
    • 4. 清理字体缓存(解决配置问题)
    • 5. 常见问题与解决方法
      • 问题 1:找不到 `Noto Sans CJK` 字体
      • 问题 2:仍显示乱码或方块
      • 问题 3:路径错误
    • 6. 总结
      • 完整代码:

在使用 Python 的可视化库如 Matplotlib 绘图时,如果数据包含中文,经常会遇到中文显示为乱码或不显示的情况。这篇文章将详细介绍如何在 Ubuntu 系统中安装 fonts-noto-cjk 中文字体,并在 Matplotlib 中正确显示中文。


1. 为什么需要配置中文字体?

Matplotlib 默认使用的字体通常不支持中文,而中文内容会显示为方块或乱码。通过安装并配置支持中文的字体,如 Google 的开源字体 Noto Sans CJK,我们可以轻松解决这个问题。


2. 安装 fonts-noto-cjk

fonts-noto-cjk 是 Google 提供的高质量开源字体,支持中文、日文和韩文字符。在 Ubuntu 中安装非常简单:

安装命令:

打开终端,输入以下命令:

sudo apt update
sudo apt install fonts-noto-cjk

检查字体安装是否成功

安装完成后,使用以下命令检查字体是否成功安装:

fc-list | grep "Noto Sans CJK"

输出中应包含类似以下内容:

/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc: Noto Sans CJK SC

如果能看到上述结果,说明字体安装成功。


3. 配置 Matplotlib 支持中文

3.1 手动加载字体

通过 Matplotlib 的 font_manager.FontProperties 指定字体路径:

from matplotlib import font_manager
import matplotlib.pyplot as plt

# 设置字体路径
font_path = '/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc'  # 确保路径正确
font_prop = font_manager.FontProperties(fname=font_path)

# 测试中文显示
plt.title("测试中文显示", fontproperties=font_prop)
plt.xlabel("横轴", fontproperties=font_prop)
plt.ylabel("纵轴", fontproperties=font_prop)
plt.plot([1, 2, 3], [4, 5, 6])
plt.show()

运行以上代码后,你应该会看到正常显示的中文标题和坐标标签。


3.2 设置全局字体(可选)

如果不想每次都手动指定字体,可以将其配置为 Matplotlib 的全局字体。以下是方法:

修改 Matplotlib 全局配置
import matplotlib.pyplot as plt
from matplotlib import rcParams

# 设置全局字体
rcParams['font.sans-serif'] = ['Noto Sans CJK SC']  # 使用简体中文字体
rcParams['axes.unicode_minus'] = False  # 解决负号显示问题

# 测试中文显示
plt.title("测试全局中文字体")
plt.xlabel("横轴")
plt.ylabel("纵轴")
plt.plot([1, 2, 3], [4, 5, 6])
plt.show()

通过这种方式,所有的 Matplotlib 图表都将默认使用指定的中文字体。


4. 清理字体缓存(解决配置问题)

如果你遇到字体未生效的情况,可以清理 Matplotlib 的字体缓存并重新加载:

rm -rf ~/.cache/matplotlib

运行上述命令后,重新运行代码,Matplotlib 将重新加载系统字体。


5. 常见问题与解决方法

问题 1:找不到 Noto Sans CJK 字体

确保字体已安装成功,运行以下命令检查:

fc-list | grep "Noto Sans"

如果没有结果,尝试重新安装字体:

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

问题 2:仍显示乱码或方块

清理字体缓存后重新运行代码:

rm -rf ~/.cache/matplotlib

问题 3:路径错误

检查 NotoSansCJK-Regular.ttc 文件的实际路径:

fc-list | grep "NotoSansCJK"

确保路径正确后更新代码中的 font_path


6. 总结

通过安装 fonts-noto-cjk 字体并正确配置 Matplotlib,我们可以轻松解决中文显示问题。以下是完整代码的总结:

完整代码:

from matplotlib import font_manager
import matplotlib.pyplot as plt

# 设置字体路径
font_path = '/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc'
font_prop = font_manager.FontProperties(fname=font_path)

# 测试中文显示
plt.title("测试中文显示", fontproperties=font_prop)
plt.xlabel("横轴", fontproperties=font_prop)
plt.ylabel("纵轴", fontproperties=font_prop)
plt.plot([1, 2, 3], [4, 5, 6])
plt.show()

通过以上方法,Matplotlib 在 Ubuntu 系统中完美支持中文,再也不用担心乱码啦!希望这篇教程能帮到你,祝你绘图愉快! ????