在 Ubuntu 使用 fonts-noto-cjk 设置 Matplotlib 支持中文的完整教程
在 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 系统中完美支持中文,再也不用担心乱码啦!希望这篇教程能帮到你,祝你绘图愉快! 🎉