土薯工具 Toolshu.com 登录 用户注册

在线 Python 环境中自定义 Matplotlib 字体

原创 作者:bhnw 于 2025-10-07 23:11 编辑 34次浏览 收藏 (0)

在线 Python 运行工具(Python 3.12.7)中,除了使用系统预置的 Alibaba PuHuiTi 字体外,用户还可以上传并使用自定义字体。本文以教学为目的,逐步演示如何在浏览器环境中完成自定义字体的配置与使用。

一、为什么需要自定义字体?

  • 系统默认字体风格不符合需求(如需使用思源黑体、站酷快乐体等)
  • 需要统一品牌视觉(如使用企业专属字体)
  • 教学中演示字体加载机制

⚠️ 注意:若仅需显示中文,推荐直接使用 Alibaba PuHuiTi,无需额外操作。


二、操作步骤

步骤 1:准备字体文件

  • 下载 .ttf.otf 格式的字体文件(如 ZCOOLKuaiLe-Regular.ttf
  • 确保字体文件可合法使用(遵守授权协议)

步骤 2:上传字体到虚拟文件系统

  1. 在工具界面中点击 “文件列表” -> “上传文件” 按钮
  2. 选择本地字体文件(例如 myfont.ttf
  3. 上传后,文件将位于当前环境虚拟目录(路径如 ./myfont.ttf

步骤 3:在代码中注册并启用字体

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

# 1. 注册字体文件(路径需与上传位置一致)
font_path = './myfont.ttf'  # 替换为实际文件名
fm.fontManager.addfont(font_path)

# 2. 获取字体名称(可选:用于验证)
font_prop = fm.FontProperties(fname=font_path)
font_name = font_prop.get_name()
print("已加载字体名称:", font_name)

# 3. 设置为默认 sans-serif 字体
plt.rcParams['font.sans-serif'] = [font_name]
plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号

# 4. 绘图测试
plt.figure(figsize=(6, 3))
plt.text(0.5, 0.5, "自定义字体示例", fontsize=20, ha='center')
plt.axis('off')
plt.show()

# 5. 保存图像
plt.savefig('custom_font_demo.png')
plt.close()

三、常见问题与调试

Q1:如何确认字体是否加载成功?

运行以下代码列出所有已加载字体中包含关键词的部分:

import matplotlib.font_manager as fm

# 查看所有字体名称
names = {f.name for f in fm.fontManager.ttflist}
print(sorted(names))

# 或搜索特定名称
target = "KuaiLe"  # 替换为你期望的字体关键词
matches = [n for n in names if target.lower() in n.lower()]
print("匹配结果:", matches)

Q2:图像仍显示方框或乱码?

  • 检查 font_path 是否正确(区分大小写,路径需完整)
  • 确认字体文件是 TrueType (.ttf)OpenType (.otf) 格式
  • 确保 plt.rcParams['font.sans-serif'] 使用的是字体的 family name(非文件名)

Q3:能否同时使用多个自定义字体?

可以。重复调用 fm.fontManager.addfont() 注册多个字体,绘图时通过 FontProperties 指定:

from matplotlib import font_manager

prop1 = font_manager.FontProperties(fname='./font1.ttf')
prop2 = font_manager.FontProperties(fname='./font2.ttf')

plt.text(0.2, 0.5, "字体1", fontproperties=prop1)
plt.text(0.6, 0.5, "字体2", fontproperties=prop2)

四、示例:使用“站酷快乐体”显示中文

假设已上传 ZCOOLKuaiLe-Regular.ttf

下载链接:https://pan.baidu.com/s/15FMvEHiL_9T3JV71tw3e8Q?pwd=eb5y

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

# 注册字体
fm.fontManager.addfont('./ZCOOLKuaiLe-Regular.ttf')

# 设置默认字体
plt.rcParams['font.sans-serif'] = ['ZCOOL KuaiLe']
plt.rcParams['axes.unicode_minus'] = False

# 绘图
plt.figure(figsize=(5, 2))
plt.title("欢迎使用自定义字体!")
plt.text(0.5, 0.5, "Hello 中文", fontsize=24, ha='center')
plt.axis('off')
plt.show()
plt.savefig('zcool_demo.png')
plt.close()

✅ 成功关键:'ZCOOL KuaiLe' 是该字体的 family name,可通过 FontProperties(fname=...).get_name() 获取。


五、注意事项

  • 会话隔离:关闭页面后,上传的字体文件将丢失,需重新上传。
  • 性能影响:频繁注册字体可能影响执行速度,建议在脚本开头一次性完成。
  • 版权合规:仅使用可免费商用或已获授权的字体文件。
  • 不要覆盖系统字体:避免写 plt.rcParams['font.sans-serif'] = "SimHei",这会破坏预置中文字体支持。

六、总结

在在线 Python 环境中自定义 Matplotlib 字体,只需三步:上传 → 注册 → 设置。该流程不仅适用于个性化绘图,也是理解 Matplotlib 字体机制的有效教学手段。

立即实践:https://toolshu.com/python3

发现周边 发现周边
评论区

加载中...